Schedules are deterministic from the rules - every time AM restarts or a schedule fires it can compute the next timer and start a single android alarm for the next expiry. No persistence is required which saves pathlength and storage writes.
Restore & wait/delay timers are started by events so would need to be persisted every time and on restart AM would need to look for anything persisted from the last time AM ran. It's not worth the extra path length so they use java timers in memory and they're dropped by a restart. AM restarts should be rare so the difference is marginal, it's not so much reliability but a question for the user - do they have problems with their AM Server, power, or with the target devices? Do they edit the rules frequently when critical devices are running?
On android there can be many reasons for delays in how fast AM reacts - system load, network load, network errors, etc. For some tasks short pulses are needed, e.g. some fan or auto light controllers use 1/2s on/off pulses to change states, set speeds, etc. When restarting a wifi network you can't use AM to turn the wifi power back on if there's no wifi. Or a sump pump or similar that needs to turn off after a few minutes - it might be bad to start it, have wifi go down and it not stop on time. Heaters controlled from AM, turned off when a measured temperature is reached may loose wifi so a limit on the max run time can be safer. I use SetMomentary cases like that, esp for wifi restarts.