For example, if I send:
Are we guaranteed that they come in at the correct order?
First, some clarifications are in order. Note that sendMessage() targets a single node while putDataItem() results in syncing data across the whole network. So to make the question more precise, I would assume you are talking about the situation where we are looking at a single node where the sendMessage() is targeting and at the same time, on the very same node we are looking at data changes. In addition, I am going to assume that the arrival at that node is measured when onMessageReceived() and onDataChanged() are called. With that, let's look at your question:
Hope this answers your question.