If the timestamps in the log are accurate, then I think that the RX1 and RX2 receive windows do not always open at the expected time. A downlink in RX1 should be expected 1 second after Tx Done, and if nothing is received in RX1 then RX2 is expected 2 seconds after Tx Done. So, you probably want the log to show RX starting a bit earlier than the expected time, and any timeout happening a bit after the expected time, to allow the device to detect the downlink.
Above, RX1 opens 1.010 seconds after Tx Done, and RX2 2.025 seconds after Tx Done. Both are too late?
Some other occurrences in the log show RX1 opening a bit before the expected time (good), but RX2 still opening too late. If the times in the log would be accurate, then those differences between different uplinks may be weird too?
Assuming there’s not a downlink for every uplink, you’ll need to compare the device’s log to the uplink/downlink you see in TTN Console to the log in the device, to see if RX1 and RX2 could have been okay. (You may want to reduce the number of transmissions to make it a lot easier to compare the two. Also, note the daily limits though not enforced yet.)
You may want to look into adjusting (enlarging) those receive windows, but I don’t know if the device supports that. Or look into whatever code may be messing with the timing.
(Like mentioned above, for DR5/SF7, you’d be expecting RX1. And RX2 is erroneously using DR0/SF12 rather than DR3/SF9.)