What’s the value of levelLoadDelayTime? Have you tried to log it into your console? If not, do that, please.
Also add a Debug.Log to your ReloadLevel method to see if Invoke works.
The value of levelLoadDelayTime represents seconds in the context of the Invoke method. If levelLoadDelayTime is, for example, 120, that’s 120 seconds = 2 * 60 seconds = 2 minutes, which is very long. If you have to wait for such a long time, it might feel as if the code did not work at all even though it does work.
Are there any other messages in your Console when ReloadLevel is supposed to get executed?
I cannot see any code where the value of delaytime gets overridden, so maybe there are multiple CollisionHandler objects in your scene? A quick way to check that is another Debug.Log:
The second parameter allows us to click the message once, and the corresponding game object (which is assigned to gameObject) gets highlighted in the Hierarchy.
Two different ids means two different objects. The same ids means the same object. Maybe you could modify the last Debug.Log in StartCrashSequence() accordingly. If you get the same id, you are right, and the value of levelLoadDelayTime gets changed somewhere.
If you see two different ids, you have two different levelLoadDelayTime variables. Not in the same class, of course, but two variables of the same name means two objects.
If you see three different ids, there are three different objects. And so on.
Now click the messages that show the id. Which game objects get highlighted? Is there a game object that is unexpectedly highlighted? If so, remove the CollisionHandler component from it.
Also make sure that each of the “correct” game objects has got only one CollisionHandler component attached.