You're right - that is weird. And not an engine problem, as it turns out. It seems like dereferencing a null object has some unpredictable and amusing effects, and invoking random callbacks is probably the least of your worries if you do that.

So this one was a bug in my code - a null reference.
However, while debugging this issue I realized that the part of the engine that deals with TimedTask instances is potentially fragile. It looks as if it can handle new tasks being added in timer callbacks, but if a timer callback ever calls removeTask, bad things will happen. It's usually good practice to break down this kind of operations into two parts: The first loops through the tasks and adds any tasks that need handling into a temporary array, and the second part iterates over the temporary array, calling all the update() methods and removing any tasks that need to be removed.