```python
from typing import List

def unpack_frame(data: List[int]) -> List[int]:
    if not isinstance(data, list):
        raise ValueError("Input must be a list")
    
    if len(data) == 0:
        return []
    
    if not all(isinstance(x, int) and 0 <= x <= 255 for x in data):
        raise ValueError("All elements must be integers from 0 to 255")
    
    header_varint = data[0]
    if header_varint < 1 or header_varint > 4:
        raise ValueError("Header varint must be between 1 and 4 bytes")
    
    reading_count = header_varint
    readings = []
    
    for i in range(1, header_varint + 1):
        reading_varint = data[i]
        if reading_varint < 1 or reading_varint > 5:
            raise ValueError("Reading varint must be between 1 and 5 bytes")
        
        byte_sum = sum(data[:i])
        trailer_byte = data[i + reading_varint - 1]
        if trailer_byte != byte_sum % 256:
            raise ValueError("Trailer byte does not match the byte sum")
        
        readings.extend([byte for byte in data[i:i + reading_varint]])
    
    if len(readings) != reading_count:
        raise ValueError("Number of readings does not match the header varint")
    
    return readings
```