Touch events are out of order without XI_TouchOwnership
So the documentation states that XI_TouchOwnership is only for special cases and should be avoided, which is understandable given the complexity. However unfortunately the touch events are almost useless without that event mask set.
On a system with passive grabs (e.g. under GNOME), an application will not get any touch events until after gnome-shell has decided it doesn't want them and calls XIAllowTouchEvents(). However this is done per touch point, meaning the events will be replayed per touch point, meaning they will not be ordered correctly relative each other and it may seem like touches are sequential rather than simultaneous.
I haven't checked if the timestamps are left alone so a client could sort things again, but it is still insufficient as the client has no way of knowing if it has gotten all events yet or if there is more on its way. Not only would it need to wait for the X server, but it also needs to wait for gnome-shell (and other passive grab clients) to finish deciding. And there is no mechanism for this from what I can tell.
So in the end, the only practical solution I can see is to use XI_TouchOwnership and handle this in the client.
Hopefully things could be improved, but if not then the documentation should be updated to state that XI_TouchOwnership is a necessary evil and not something that you should avoid.