Active agents and proxies send values to server in "parcels" containing timestamp of each collected value as well as timestamp of the parcel as a whole. Of course, all these timestamps are measured on agent's/proxy's clock.
Server adjusts timestamps of all values in the parcel by the difference between the parcel's timestamp and a time moment when the parcel was received (measured on server's clock) thus converting value timestamps from agent's/proxy's clock to server's clock.
However, clocks of different machines tick at different rates and even NTP can't bring them perfectly in sync. If clock difference fluctuations exceed separation of two successive item values which by chance are transferred to the server in different parcels these values can swap their order when they are processed by server and generate events.
More sophisticated timestamp correction algorithms should be used. Ideally server should keep track of differences between its clock and clocks of all hosts.
This issue is about providing a complete solution, original issue was
ZBX-9640 is related.