Since you’re not seeing duplicates in the system info, it sounds like you’re running into the known scenario where:
a job starts (which takes it out of the queue)
this puts the next run of the job in the “scheduled” state (all as it should be)
the running job goes so long it passes the start time of the “scheduled” one causing the “scheduled” one to be put into the pending queue (causing it to run as soon as the currently running job ends)
There have been some suggestions on how to handle this scenario (including a “cooldown timer” @drakar2007 mentioned) but so far nothing has been implemented.
Here’s a summary of some “Server state properties” fields:
Here’s a summary of how the queue is supposed to work: