This kind of issue has been poked around before, without resolution -
Note that talk of “new rules engine” in OH2 environment is effectively same as OH3 engine.
There is a sort-of logic to the “twice” symptom, if the “job” is run prematurely it should reschedule itself for the next due time in just a few seconds.
Why does it fire prematurely is the question.
This would tie in with the suggestion that it is rescheduling calculation that messes up.