First, please How to use code fences. Stuff gets hidden, spacing gets messed up and over all your code and configs and logs become really challenging to read.
Thank you for posting your over all goal. It really helps provide the best answer we can.
One thing I don’t see here which will shed a whole lot of light on what is going on are logs. Do you see errors in openhab.log? Do you see Items changing states in events.log? All you’ve posted are the log statements from the Rules.
Many if not all of your questions will be answered by watching the logs as you interact with the button. In particular:
There are messages in openhab.log when you execute a command that isn’t in the whitelist.
I think by default the Exec binding will log out the command that it ran in openhab.log as well as what is returned by the script. Even if it doesn’t, you can see what the script produced by linking a String Item to the output Channel and watching events.log for changes to that Item.
I don’t know either, but watching the logs while you toggle the button should answer that question fairly quickly.
I follow the philosophy that one should do the simple thing first and test whether it works. Only if it doesn’t work should one move on to something more complicated. So rather than being afraid and ignorant about what happens with repeatedly tapping the toggle on the sitemap, try it out! You won’t break anything and it will be way easier to just set the autorun flag to "true" and avoid all the Rules. Only when that fails should we worry about adding a latch to the Rule to prevent it from running when it’s already running.
Your overall rules approach looks reasonable. But we need more information to understand what is going wrong, if anything. Definitely have your script output something and capture the output (i.e. link an Item to the output channel. There might be some unexpected error or at a minimum we will see if the script is actually running successfully.