It’s not duty cycle related.
LMiC purposely delays the TX_COMPLETE event to prevent the next transmission to collide with a downlink that the node did not receive, but the gateway is still busy sending (and therefor not in receive mode).
It uses a worst-case for that, at SF12 in the RX2 window, that is defined by DNW2_SAFETY_ZONE (in lmic.c) with a default of 3 seconds.
Maybe this is bit conservative, also because TTN is use SF9 in RX2.
We could implement this another way, by not using the TX_COMPLETE event to prevent too early tx, such that the node can go in sleep as soon as possible after the RX2 preamble window.