I think your solution(s) a little over-complicated.
Wouldn't this achieve what you want.... The only "issue" I can see is that it will need the rollover at 7 AM to set "Pointer" to the current day number.
You could leave it like that, and the accumulated time goes into array element 0, which is a redundant space anyway since there is no day 0. Or you could manually set it to the correct day, or do it with a S:FS bit.
Either way, once it is set, the DIV puts the data into the correct place, the Day number of the current month. And it does it continuously, so no data will be lost if the PLC goes off, and a new "day" starts while it is off.
Or, if you wanted to be really fancy, you could add the month to the array as another dimension, and record a years worth of waiting times. All you would need is a second MOV after the ONS to capture the Month number into the new array dimension name (Perhaps use "Month"). Same would apply as above, it would need one "initialisation" cycle, or manually set.
Then add code to detect a leap-year (evenly divisible by 4 or 100, but not 400), and clear the contents of array [2,29].
You could even go back easily to your 30-day cycle, which means you wouldn't have to account, in your totalisations and averaging, for the months that don't have 31 days, or even account for the fact that the number of days in February is variable !!
Anything is possible, just how far you want to take it....