PlayerState Access Violation 4.16.3

Hello,
I’ve been running into a bug where trying to access a PlayerState as anything other than the first player (both local and network) results in an access violation error. What’s particularly strange to me is that I have identical code on Engine 4.15.3 and it works perfectly. Any suggestions? Crash report and code below:

Crash Report:
LoginId:be5890fe4e65140a06f3d2ae97944984
EpicAccountId:6a6ce7abdb4a4ea89d1e0acdd9047c7f

Access violation - code c0000005 (first/second chance not available)

UE4Editor_FPSWizard!AMP_FPSDemoCharacter::BeginPlay() [d:\users\cw_si\documents\unreal projects\fpswizardeditor\plugins\fpswizard\source\fpswizard\private\mp_fpsdemocharacter.cpp:348]
UE4Editor_Engine!AActor::DispatchBeginPlay() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:3104]
UE4Editor_Engine!AActor::PostActorConstruction() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:2970]
UE4Editor_Engine!AActor::FinishSpawning() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:2876]
UE4Editor_Engine!AActor::PostSpawnInitialize() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:2818]
UE4Editor_Engine!UWorld::SpawnActor() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\levelactor.cpp:459]
UE4Editor_Engine!AGameModeBase::SpawnDefaultPawnAtTransform_Implementation() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\gamemodebase.cpp:1123]
UE4Editor_Engine!AGameModeBase::execSpawnDefaultPawnAtTransform() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\classes\gameframework\gamemodebase.h:47]
UE4Editor_CoreUObject!UFunction::Invoke() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\class.cpp:4461]
UE4Editor_CoreUObject!UObject::ProcessEvent() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:1313]
UE4Editor_Engine!AActor::ProcessEvent() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:695]
UE4Editor_Engine!AGameModeBase::SpawnDefaultPawnAtTransform()
UE4Editor_Engine!AGameModeBase::SpawnDefaultPawnFor_Implementation() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\gamemodebase.cpp:1115]
UE4Editor_Engine!AGameModeBase::execSpawnDefaultPawnFor() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\classes\gameframework\gamemodebase.h:47]
UE4Editor_CoreUObject!UFunction::Invoke() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\class.cpp:4461]
UE4Editor_CoreUObject!UObject::ProcessEvent() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:1313]
UE4Editor_Engine!AActor::ProcessEvent() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:695]
UE4Editor_Engine!AGameModeBase::SpawnDefaultPawnFor()
UE4Editor_Engine!AGameModeBase::RestartPlayerAtPlayerStart() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\gamemodebase.cpp:1185]
UE4Editor_Engine!AGameModeBase::RestartPlayer() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\gamemodebase.cpp:1152]
UE4Editor_Engine!AGameModeBase::execHandleStartingNewPlayer() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\classes\gameframework\gamemodebase.h:47]
UE4Editor_CoreUObject!UFunction::Invoke() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\class.cpp:4461]
UE4Editor_CoreUObject!UObject::ProcessEvent() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\scriptcore.cpp:1313]
UE4Editor_Engine!AActor::ProcessEvent() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\actor.cpp:695]
UE4Editor_Engine!AGameModeBase::HandleStartingNewPlayer()
UE4Editor_Engine!AGameMode::PostLogin() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\gamemode.cpp:126]
UE4Editor_Engine!UWorld::SpawnPlayActor() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\levelactor.cpp:721]
UE4Editor_Engine!UWorld::NotifyControlMessage() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\world.cpp:4286]
UE4Editor_Engine!UControlChannel::ReceivedBunch() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\datachannel.cpp:1298]
UE4Editor_Engine!UChannel::ReceivedSequencedBunch() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\datachannel.cpp:290]
UE4Editor_Engine!UChannel::ReceivedNextBunch() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\datachannel.cpp:656]
UE4Editor_Engine!UChannel::ReceivedRawBunch() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\datachannel.cpp:381]
UE4Editor_Engine!UNetConnection::ReceivedPacket() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\netconnection.cpp:1207]
UE4Editor_Engine!UNetConnection::ReceivedRawPacket() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\netconnection.cpp:626]
UE4Editor_OnlineSubsystemUtils!UIpNetDriver::TickDispatch() [d:\build\++ue4+release-4.16+compile\sync\engine\plugins\online\onlinesubsystemutils\source\onlinesubsystemutils\private\ipnetdriver.cpp:227]
UE4Editor_Engine!TBaseUObjectMethodDelegateInstance<0,UNetDriver,void __cdecl(float)>::ExecuteIfSafe() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\delegates\delegateinstancesimpl.h:858]
UE4Editor_Engine!TBaseMulticastDelegate<void,float>::Broadcast() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\delegates\delegatesignatureimpl.inl:937]
UE4Editor_Engine!UWorld::Tick() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\engine\private\leveltick.cpp:1262]
UE4Editor_UnrealEd!UEditorEngine::Tick() [d:\build\++ue4+release-4.16+compile\sync\engine\source\editor\unrealed\private\editorengine.cpp:1633]
UE4Editor_UnrealEd!UUnrealEdEngine::Tick() [d:\build\++ue4+release-4.16+compile\sync\engine\source\editor\unrealed\private\unrealedengine.cpp:386]
UE4Editor!FEngineLoop::Tick() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\launch\private\launchengineloop.cpp:3119]
UE4Editor!GuardedMain() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\launch\private\launch.cpp:166]
UE4Editor!GuardedMainWrapper() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:134]
UE4Editor!WinMain() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\launch\private\windows\launchwindows.cpp:210]
UE4Editor!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:253]
kernel32
ntdll

Code:

	//If there is another player already with the same name, append the player's index to our name (ie Namehere[1])
	if (NetIndex > 0)
	{
		//Holds the number of players with the same name
		int NumPlayersWithSameName = 0;

		//Iterate through all FPSCharacters in the world
		for (TActorIterator<AMP_FPSDemoCharacter> ActorItr(GetWorld()); ActorItr; ++ActorItr)
		{
			//Ptr to character
			AMP_FPSDemoCharacter* OtherChar = *ActorItr;

			//Confirm the above
			if (OtherChar)
			{
				//If the other character isn't this and the other player's name (in their player state) is either the same name or is "samename["
				//VVV THIS LINE IS THE ONE IN CRASH REPORT, THOUGH IT SEEMS ANY PLAYER STATE ACCESS WILL CRASH THE ENGINE VVV
				if (OtherChar != this && OtherChar->PlayerState->PlayerName == this->PlayerState->PlayerName || OtherChar->PlayerState->PlayerName.Contains(FString::Printf(TEXT("%s["), *this->PlayerState->PlayerName), ESearchCase::CaseSensitive))
				{
					//Add one to the players w/ same name count
					NumPlayersWithSameName++;
				}
			}
		}

		//If we have one or more characters with the same name
		if (NumPlayersWithSameName > 0)
		{
			//Create a new player name as "ourname[number of players with same name - 1]"
			//IE if our name is "Chris" and there's another player already with the name "Chris" then change our name to "Chris[0]"
			FString NewPlayerString = FString::Printf(TEXT("%s[%d]"), *this->PlayerState->PlayerName, NumPlayersWithSameName - 1);

			//Get our player state and change the player name to the above string
			AFPSDemoPlayerState* PS = Cast<AFPSDemoPlayerState>(this->PlayerState);
			if (PS)
				PS->PlayerName = *NewPlayerString;
		}
	}

	//Set our player name to the above
	if (Cast<AFPSDemoPlayerState>(this->PlayerState))
		this->PlayerName = FName(*Cast<AFPSDemoPlayerState>(this->PlayerState)->PlayerName);

Fixed. Just move any PlayerState access to after BeginPlay. Still odd that it works in 4.15 but not 4.16.3.