I can reproduce it with an "at" timer. There is definitely a bug there, introduced when the seconds field became a floating point (so you can have 0.1 seconds).
I suggest as a work-around that you delete and re-add the timer. Or use "addxml.lua" module:
http://www.gammon.com.au/forum/?id=7123
For example:
require "addxml"
addxml.timer { at_time = true,
hour = 23, minute = 15, second = 16.8,
send = "Timer fired!",
send_to = sendto.output,
enabled = true,
name = "whatever",
}
If you give a name to the timer it replaces another one of the same name (if any).
However perhaps you don't really want an "at" timer? I think this has gone unreported for so long because usually an "at" timer is for stuff like rotating your log files once a day, at midnight, and no-one cares if it is done at midnight or midnight + 5 seconds.
If you are trying to know when something happens in the near future (where 9 seconds would make a difference) like when a spell wears off, you are probably better off with an "every" timer, and make it "one-shot". A one-shot timer fires once and then deletes itself. This would be easier anyway because you probably know the interval, and using an "at" timer means you have to take the interval, add in the time right now, and get the time in the future when you want it to fire.