While Echo Speaks or Alexa TTS would both work for this, since you just want to speak a specific phrase, an Alexa Routine with a virtual contact or motion sensor on Hubitat isn't very hard to set up and is an "official" way to do things. The other solutions rely on undocumented interfaces into Alexa that Amazon could break at any time (though they have not changed anything insurmountable to date)--just something else to consider. But they do get you more power.
Back to this rule, I often refer people to this post when they have questions about repeats: How to get Repeated Notifications using Rule Machine. There are several examples of how to set up repeats and how to stop them, and even though you aren't really doing a "notification" (from Hubitat itself), the basic idea is the same for any repeat and it's just the actions inside that would be different.
On a related note, since Alexa (last I checked) doesn't support switches for "triggers" for Routines, I'm assuming you're using some sort of custom "motion with switch" or similar driver so Alexa sees it as a contact or motion sensor it can use. If that driver has an "auto off" (or "auto inactive") setting, you could save yourself a bit of trouble in the rule by just configuring that. But if you have to turn it off yourself (and you indeed likely do so Alexa will see it as "active" again), then you'll have to do it yourself in your rule like you are now--almost. What you have now will actually turn the switch off before it turns it in, as the "delay" option on an action does not wait for the delay to be over but rather schedules that action for the future, then moves on to the next action. If you use a plain "Delay" action, then the actions do pause at that spot until the delay is up.
Going back to that post above, one of the formats suggested there could look something like this in your case--except I added the first two lines in the Actions to not start the notification cycle until 2 minutes have passed (a "Wait" with a timeout; the simple condition "IF" after the wait tests whether we got there because the event happened--i.e., the door closed--or the time ran out, and does not proceed if it was the former).
Trigger Event: Freezer door open
Actions:
Wait for events: Freezer door closed --> timeout 0:02:00 (cancelable)
IF (Freezer door closed) Exit Rule
REPEAT Every 0:00:30 (Stoppable)
IF (Freezer Door Closed Then) THEN
Stop Repeating Actions
ELSE
On: Dining room freezer (VR)
Delay 0:00:05
Off: Dining room freezer (VR)
END-IF
END-REP
(To be clear on the timing, this starts the notifications if the door stays open for 2 minutes and repeats the notification every 30 seconds. The delay before the virtual switch turns off just needs to be less than that 30-second repeat interval; I choose 5 seconds there because it seemed sensible enough. You can adjust these as needed for your case.)
I'm not sure if Echo speaks can "natively" handle repeated notifications until a certain condition is met. If so, that would certainly be easier. (Aside from needing to set up ES in the first place.) If not, with either TTS solution, you could use the built-in Notifications app, which can do everything this rule does but with a few clicks of configuration instead of manually specifying all this logic yourself--you just need a TTS or notification device, as the Notifications app cannot work with switches in this manner.