In all fairness, it is not quite as simple as you would like it to be.
Nevertheless, given that this issue is one that comes up over and over, and despite the documented solutions and ignored advice concerning KISS, I am adding a feature to RM in the next release that can cause a rule to ignore trigger events if the rule is already running, like this:
There are three ways a rule can come to the end of "running": after the final action is run, the Exit Rule action is run, or Stop Rule Actions run against the rule (by some other rule).
Here are the logs of a rule with a delay that is triggered multiple times during the delay:
Notice that there were 4 instances of the rule running simultaneously, each throwing a delay, and that eventually those delays catch up.
Below are the logs of that same rule running with similar trigger events but with the option to ignore trigger events turned on:
Notice that it logs the fact that trigger events are ignored. The rule won't be triggered again until it has completed 'running', including all of its delays expired (or stopped).
This will be in the 2.3.9 release.