If timers are running longer than scheduled, or the schedule/processing get stuck do to thread or cpu bottleneck, it is possible that the updates for persistence overlap. The issue seems that the task(1) try to finish the timer and task(2) is about to start but see the concurrency. The DB is updated with the 'old' next timeout, but the internal Timer instance will be updated with the next possible schedule due to a race condition between the two threads updating the object.
I am able to reproduce the issue with EAP 7.0.7 and 7.1.0.ER1. But I cannot hit it with 6.4.14 nor 6.4.16. Seems like 6.4.z is not affected. Verified with EAP 6.4.17.CP.CR4
Released on 2017-09-05 as part of the EAP 6.4.17 release.