I think that's a good idea, but there's one corner case that, I think, we should think about: a timer deleting the next timer from the list. If we keep the code in timer.el that says:
(defun cancel-timer (timer)
"Remove TIMER from the list of active timers."
(timer--check timer)
(setq timer-list (delq timer timer-list))
(setq timer-idle-list (delq timer timer-idle-list))
nil)
then that delq might, in some circumstances, modify the list we're working on. I'm not sure whether it's okay, performance-wise, to replace delq by remq here. Is cancelling one timer from another timer's code something that should ever have well-defined effects (I strongly suspect the answer is "Don't do that")? I confess I do not know whether delq is guaranteed only to modify the list in ways that "make sense" (the current implementation does, but it also doesn't appear to QUIT at all, so maybe it should be modified anyway...).