```python
from typing import List

def unpack_frame(data: List[int]) -> List[int]:
    """
    Decode a sensor record frame from a list of byte values and return its readings.
    """
    if not isinstance(data, list):
        raise ValueError("Input must be a list.")
    
    if len(data) < 1:
        raise ValueError("Frame must contain at least one byte.")
    
    def read_varint():
        result = 0
        shift = 0
        while True:
            byte = data.pop(0)
            result |= (byte & 0x7F) << shift
            shift += 7
            if not (byte & 0x80):
                break
        return result
    
    def read_trailer():
        if not data:
            raise ValueError("Trailer byte missing.")
        trailer = data.pop()
        return trailer
    
    def validate_frame():
        if not data:
            raise ValueError("No trailer byte found.")
        
        total_sum = 0
        while data:
            byte = data.pop(0)
            total_sum += byte
            if not (byte & 0x80):
                break
        
        if not data:
            raise ValueError("Trailer byte missing.")
        
        trailer_byte = read_trailer()
        if trailer_byte != total_sum % 256:
            raise ValueError("Trailer byte does not match the sum of bytes.")
        
        if data:
            raise ValueError("Bytes left over after the trailer.")
    
    validate_frame()
    
    num_readings = read_varint()
    readings = []
    for _ in range(num_readings):
        readings.append(read_varint())
    
    return readings
```