Have a look at (OH 1.x and OH 2.x Rules DSL only] Why have my Rules stopped running? Why Thread::sleep is a bad idea to see if any of that applies. I suspect that you have some long running rules that are using up all your Rules runtime threads which will block the execution of all other Rules until they complete.
Honestly, don’t even bother with this until you solve the problem with the delay in your Rules executing. Until you fix this problem anything else you do will be IMHO wasted effort as it is just trying to work around a problem. Better to actually solve the root problem first.
But, as rossko57 indicates, if you trigger the Rule by Member of gAlarm changed to ON
then you know that when the Rule executes that triggeringItem changed to ON to trigger the Rule. A corresponding Member of gAlarm changed to OFF
Rule will tell you that when the Rule triggered triggeringItem changed to OFF.
But because of the problem with the delay in execution of the Rule, you cannot guarantee that the ON Rule runs before the OFF Rule does. This is why you need to solve the root problem first.