This is due to a limitation in how the Delay node works. It isn’t meant to be used within function or loop bodies. I’ll spare you the details here but I encourage you to do a little research into why that’s the case.
You actually don’t need a loop at all - what you want to use in this case is a Custom Event. For example, this bit of BP code will print your “Restarting in x seconds…” message, delay for a second, and then call the event again unless the timer has reached zero (in which case the level is restarted):
To trigger the delay initially, you can just call the same event after the “Out of ammo!” message like so:
Hope that helps. =]
Edit: Updated the first image - the Make Literal String function was redundant.