I am using X-CTU. Another thing, if I increase the delay in send_data() just after xbeeZB.ON() from 2000 to 20000, I receive all the packets.
When you start using XBee-ZB there is an initial network setting that must be done. So, this is the reason you have to wait some time before using it.
Just to say that I had a similar issue. I am sending data from a Waspmote to an Arduino via ZigBee.
My original application was powering up the ZigBee from deep sleep, then immediately entering a loop to check if the ZigBee was associated with the network, then sending the data. Though the ZigBee always associated after about 15 seconds, and the data was sent with no transmission errors, not all frames were being received by the ZigBee on the Arduino.
After reading the above post, I changed the application to power up the ZigBee, then delay 25 seconds (during which time I do not interact with the ZigBee at all), then check for association (which only takes one check in the loop as by that time the ZigBee is associated, then send the data. So far it works, as every data frame is received OK.
Thanks for this hint about the delay as it's really helped.