Your core game logic should be contained in the GameMode. If you create a GameMode (or many), you can define the various states and rationale when the game moves between “phases”. It took me awhile to figure this out. I have a GameMode for Menu/Stat phase and a separate one associated with the combat phase. The “Map” can be associated with a specific GameMode.
GameMode = Ultimate authority on the game flow. Only exists on the server (for cheat protection).
GameState = Replicates the “State” of the game to each client
GameInstance = created and maintained across all the various game modes. Think of this as the Class that is the first and last object in your game. it is instantiated on start up and destroy on exit. it is the only truly persistent class.