I am not sure if there is one correct way to implement the rain delay. The issue with your proposal is: what happens with the other programs which should run normally and that fall after the rain delay period? If we keep pushing them back and queuing them, you can quickly get into the situation where there is simply not enough time to catch up with so many queued programs. For example, let’s say a program is supposed to run every day, and there is a rain delay that happened on Monday and Tuesday. If you queue those programs to run on Wednesday (i.e. after rain delay ends), what about programs which would normally run on Wednesday? Besides, stop watering during rain delay is partly to avoid wasting water, since the rain will irrigate the lawn anyways. So delaying those programs after the rain delay ends seems to over-water the lawn still.
Using one of the weather adjustment method can partly address this issue: instead of doing manual rain delay, let the weather adjustment method to figure out the watering percentage automatically. I know the weather adjustment methods are not perfect, but my point is that no matter how you implement the algorithm, there will always be some situations where the implementation doesn’t work perfectly. So I don’t think there is one correct way to implement the rain delay.