I don't think mem2=%mem2%+1 will do anything. Rules are not like a programming language. You can't do normal math operations. Also can't use equal sign (=) except for event.
Need to use var1 to use add1 1, then assign to mem. So you don't need the mem16 scratchpad. Just transfer mem2 to var2 and do your math operations. In case of power failure, you want the irrigation to continue where it left off? You need a trigger to check on system#boot where you're at in the schedule. But really, are power failures common? If you can count them on one hand, it's not worth worrying about.
When do you turn power8 off? Should be after power 7 has finished its cycle.
Your system#boot operations are mostly unecessary. You can do all those commands one time in console and they will persist. See below:
mem1 20 /* minutes after midnight this schedule kicks in
mem2 2 /* Starts the irrigation schedule from this number upto 8.
If mem2=4, it will irrigate 4,5,6, and 7
mem3 700 /* 600 seconds (its in 1/10 of second till 111 and {<n> minus 100} seconds from 112)
mem4 3600 /* Watering spaced by 3600 seconds (1 hr) between stations
mem5 1 or 8 /* Relay8 arms the valve and Relay1 is just an unused relay and so if Relay8 is off,
no actual irrigation will occur even if this schedule is executed
mem16 mem2 /* Temporary scratchpad to retain the value on mem2
backlog PowerOnState 0; interlock 2,3,4,5,6,7; calcres 0; Timezone 99; TimeStd 0,1,11,1,2,-480; TimeDst 0,2,3,1,2,-420, pulsetime 700
Rule2
on time#minute=%mem1% do backlog var1 %mem2%; power%mem5% 1; event t1=%mem2% endon
on event#t1<8 do backlog power%value% 1; ruletimer1 %mem4%; add1 1 endon
on rules#timer=1 do backlog event t1=%var1% endon
on event#t1=8 do backlog mem2 2; power7 0; power8 0 endon
(if you really want power failure robustness...)
on var1#state>2 do backlog mem2 %var1%; power8 1; event t1=%mem2% endon
on system#boot do var1 %mem2% endon