I finally have a nice solution now for the timing of the nodes, using listenMode.delay() written a while back by joelucid.
The idea is to have each node wake up and send its report to the gateway within its designated time-slot, so that they don't step on each other. Currently, Node ID N gets the slot that is 100*N ms from the start of the minute.
When the node starts up, it has no idea what time it is, so it simply sends its report. The gateway then responds with the time between now and the start of the node's next slot. So if node 20 wakes up 24785 ms into the minute, the gateway tells it to wait for 62000-24785 ms. The node goes into listenmode.delay() for that time, before it wakes up again and reports.
One wrinkle is that the RFM69's clock, which is used for listenmode.delay, is in error by a up to 2% from the gateway's clock, so the node will wake up early or late on the next round. But each time it does, since the gateway gives it a report on how far off it was, after 2 or 3 cycles, the node can then compensate for the error and easily hit the mark within a ms or 2.
With this method, there is no wakeup burst from the gateway. The only listenMode command used is delay(), which has gone for over 1,000,000 cycles so far without a problem. With Felix's help, the current consumption is down to 3 uA during sleep (plus the current for the sensor), which means about 12 uA average during a cycle. Not bad.