The reason it works in editor and not in cooked builds is that the editor handles game instances a little differently. In cooked builds, GameInstances will call init before a level is loaded, and spawning an actor without a level being loaded is a bad idea. Having a delay kicks the spawning off to the next frame, which generally has a level loaded due to everything that is happening when the GameInstance among other things are initialized.
You should move your SpawnActor to the GameMode class or some other class or function that is guaranteed to be called when a level exists. One way to guarantee this in a GameInstance class is to assign a method or event in your custom GameInstance to the FCoreUObjectDelegates::PostLoadMap delegate, which gets fired after the successful load of any map.