Stream::timedRead repeatedly calls HardwareSerial::read without checking if a byte is available. The timer is checked in between calls to read, but within read Semaphore_pend is called with a timeout of BIOS_WAIT_FOREVER. This means that timedRead only returns after a byte is received after the timeout expires. In other words, if all data is received within the timeout, timedRead never returns. Checking HardwareSerial::available before calling HardwareSerial::read seems to fix the problem, though there may be a better solution.
Stream::timedRead repeatedly calls HardwareSerial::read without checking if a byte is available. The timer is checked in between calls to read, but within read Semaphore_pend is called with a timeout of BIOS_WAIT_FOREVER. This means that timedRead only returns after a byte is received after the timeout expires. In other words, if all data is received within the timeout, timedRead never returns. Checking HardwareSerial::available before calling HardwareSerial::read seems to fix the problem, though there may be a better solution.