I remove the extra _SLEEP as you suggested, and as you expected, things continued to work fine.
I also figured out the problem with the node never receiving messages from the gateway. It turns out that the cycle from sending a message from the node to receiving the acknowledgement from the gateway (I have reduced the bit rate slightly, but I don't think that is the major factor) takes around one second. The node transmits messages to the Gateway every 150 to 1000 ms, which means that it transmits immediately after receiving the acknowledgement. I guess it will then discard any message it gets from the radio that is not the acknowledgement it is waiting for in sendWithRetry. Increasing the transmission interval allowed the node to receive everything from the gateway.
I'm not sure what is the cause of this long message/acknowledgement round-trip, maybe it is caused by the sleep? I thought the node will only wait a few hundred milliseconds for an acknowledgement, so I guess the delay is on the receiving side?