Ah yeah sure. It's the same there. You should not remove a location, if it is the same reference as the creep_respawn_locations variable, so you should remove all remove_locations in your trigger. A simple rule (not always right though): Whenever you create a location you also need to remove it when you no longer need it.
TempLoc=creep_respawn_locations does not create a location, as it already exists (in creep_respawn_locations obviously)
TempLoc=Point(0,0) creates a location and should be removed when you no longer need it
In your initialization trigger you create a lot of locations, but since they are needed for the entire game, you do not remove them.
Local reference variables must always be nulled. There is no exception to it (atleast I don't know anything about it).
If you use:
TempLoc=Point(0,0) you create a location and TempLoc points towards this location.
call RemoveLocation(udg_TempLoc) will destroy the location (referenced part in the memory), but the variable still points to the part in the memory.
Before this part can be used again, it must not be referenced by anything. Because of this you need to null variables (so they no longer reference this part in the memory).
You do not need to do this with global variables, as they will no longer point towards this part in the memory, if you use them another time.
So basically a global variable will have one reference leak (it is not a leak by definition, as it can be removed), when it is not used (as it still points towards the last used part in the memory by the variable). You could prevent it by nulling the variable, but one reference leak per global is neglectable.
The difference with local variables is, that the same variable (loc in this case) is used multiple times (whenever the trigger runs). If you do not null it, you will have one reference leak (leak by definition, cannot be removed) per execution of the trigger.