Everything in StarterGui is cloned into a player's PlayerGui when they enter the game and each time they respawn. Therefore the timer will only change when a player dies.
The way I recommend doing a countdown GUI is to use two scripts. The first script is inside an IntValue in Workspace, and it makes that value count down. Name the value something that nothing else will be named, for this example I'll assume it's named 'count'. The second script is in the GUI. The second script sets the the text of the GUI to the number of the value in Workspace.
Script in the IntValue:
5 | script.Parent.Value = i |
In case you don't know: for loops have a third, optional argument that determines how much is added to 'i' each time the loop iterates. If we set it to -1, it will effectively count down.
Script in the GUI:
1 | local label = script.Parent |
2 | local count = Workspace:WaitForChild( "count" ) |
4 | count.Changed:connect( function () |
5 | label.Text = tostring (count.Value) |
Hope I helped!