Well, I'm not the best at this, so the other guys will probably critique me too, and that's fine with me. It's how we learn.
When you use an IF statement, you want to have either a counter statement to tell the rule what to do if the statement is not true. If you don't want it to do anything when the IF statement is not true, then you simple stop evaluation. That is done with END IF, which by the way, should be at the end of your IF statements, regardless. It's kind of like putting a period on a sentence.
So if you take your rule example above, then you should probably start by changing the trigger event. I mean, what you have will work, but you normally just want something to kick off the rule (e.g. Trigger) and then you're going to specify the exact way to trigger is like you've done in your first action. So you would normally make the trigger be simply changed, rather than specifically Open or specifically Closed. That'll start the first action, where the door sensor will be evaluated to see if it's Open.
Next in your first action, you've ask to evaluate Stairway door to see if the contact sensor is Open. If it is, then the sensor state will be True and the rule up to that point is also True. THEN it will speak that the "stairway door opened". If that's what you want up to that point, then it should work as you expect.
In the next step, you're asking for a delay of 2 minutes. Again, that's fine, but if the stairway door closes before that and then opens again, it cannot evaluate it because it's waiting for that 2 minute timeout to finish. So add Cancel to that. What that does is cancels the delay if the Stairway door is closed, and it can then immediatley start in on the next part of your rule where it checks the Stairway door contact sensor again to see if it's still open. But, before you can ask another IF question, you need to end the first one. So you should also have END-IF after your Delay
Now that you've stopped asking the first question in your rule, you can add another IF and evaluate the stairway door contact sensor again to see if it's still open. If it is, you want to repeat every 5 minutes until it's done. I see you asked it to stop on truth change, and that's good because otherwise it would just keep repeating even when the door was closed. However, then next thing you want is for it to speak Please close the Stairway door. The way you've written it, that won't happen. You want speak to follow Repeat every 5 min in the rule when Stairway door open is TRUE, ELSE Stop Repeating Actions. You don't need to ask again if the Stairway door is closed, because when the first and second IF statements in your rule are not TRUE, then the Stairway doors IS indeed closed, so the result is FALSE.
There's a better way to do this, but I don't know what it is, and what you have should work, just needs a few changes.
So this is what I think will work for you.
IF (Stairway door open) THEN
Speak on Living Room Mini: '%device% open'
END-IF
IF (Stairway door open) THEN
Delay 0:02:00 <- Cancel
Repeat every 0:05:00 (stop)
Speak on Living Room Mini: 'Please close %device%'
ELSE
Stop Repeating Actions