What spreading factor are you using? Did you include the LoRaWAN headers, MIC, and 4/5 coding granularity in your airtime calculation?
A node intended to be battery powered should sleep at least between the last receive window and the next transmission; but that it should doesn’t meant a particular implementation will.