The 540 minutes limit is mainly because the duration time is stored in a signed integer. So the maximum duration is 32767 seconds (roughly 546 minutes). This should be easy to change to twice as much, by using unsigned integer. I will put it on the todo list for the next update.
Regarding the solution to frequent power loss. The way you described seems to be the best. I just did a test on my controller: setting 1 minute duration with 1 minute interval seems to do what it’s supposed to (except there is a 1-second delay). I cannot reproduce the problem you described as ‘run 1 minute, stop 1 minute’. The 1-second delay can be avoided by deleting the + 1 in the following line:
unsigned long accumulate_time = curr_time + 1;
at function ‘void schedule_all_stations’ in interval_program.pde