I'm not too sure if I perfectly understand, but are you asking for methods on how to achieve what you mention? If yes, this is what I usually do.
For case1, I would use a local variable. For example, after hitting the tile for the first time, check to see if the tile's local variable is 1. If it is, do your actions and set the tile's local variable from 1 to 0. So the next time it hits it, it won't run anymore. If you want it to run for the 1st and maybe the 5th or other number, use a sub event and put the conditions if local variable = 1 "or" 5.
Case two, I usually do this as well. But if you want something to happen more frequently, instead of making 4 events for it, you could do it with just 2. Again just use the "or" event. Which = 1 "or" Which = 2 "or" Which = 3. For the last one, you could do that but if you are going to leave it empty, than there is no need to create the event there. If you have an event running that will reset it or your are not going to run that event again, you can just keep the two events and remove the rest.