Serial data in interrupt.

Yeah what he said above.
You are checking if there is any data availabe in the buffer by using if(XBee.available() > 0), however you are not actually reading the data itself which means the data remains in the buffer.
So next time your code checks if there is data in the buffer, then of course it will still return true as its still the old data + any new data that has arrived.

You need to read in the data if you want it to be removed from the buffer, otherwise your flush command does the same function.

You are currently only checking if something has been sent, but you dont appear to care what was sent, only that something was sent.