I don't think that you are "losing" byte on receiving side from Serial4, just that it is not printed on (USB) serial monitor.
I suspect a buffer overflow problem in the USB composite library.
It may happen that the USBComposite library version from Roger's core is not up to date.
You can download the latest version from here:
https://github.com/arpruss/USBComposite_stm32f1
After you have updated and you are still facing the problem, you should post an issue there.
Btw, your program is buggy, because you read only one byte form Serial4 if (bl>>7) != 1 , but you have received 3. So the order of the next bytes will be shifted.
In order to monitor the Rx timings you could add some serial output of millis, just to be sure that Serial4 input buffer does not overflow.
Also, you could enable the timestamp display in the serial monitor.