Further to my original report and fix, passing 1 as the time stamp can fail in exactly the same way, because the X server always interprets half the possible time values as being in the past and half in the future. So if you run an X server for longer than about 25 days (and I've just done this inadvertently), the fix stops working.
As far as I can tell, there's still an easy work around: use the special value 0 instead of 1. 0 means "the current time".
This means that the list argument to dbus-call-method containing the line number, column number and time stamp becomes:
(list :struct :int32 (line-number-at-pos) :int32 (1+ (current-column))) :uint32 0)