If a job is scheduled using TemporalExpressions.Frequency the start time of the job will gradually move forward when the excecution of the job is delayed by one or more units of the frequency type.
Example: Job is set up to start at 2017-01-01 00:00:00 and run every ten minutes. One month later due to some circumstances the job starts at 2017-02-01 00:01:01 which results in the next execution to be scheduled at 2017-02-01 01:11:00 in stead of 2017-02-01 01:10:00.
The reason behind this behaviour is the TemporalExpressions.Frequency#prepareCal function. It has the purpose to jump from the first starting time to the latest possible execution of the job. But instead it just sets it to the current time (with the precision of the chosen frequency type) and calculates the next execution time from this point.
The error is at units = (units / this.freqCount) * this.freqCount;. This is no operation. What should have been done (and to me it looks like this was the intention), is a substraction of the remainder of an integer division of units and this.freqCount to get the number of units of the frequency type that have passed since the first start time.