C++ variables change unwillingly when player spawns

I’m making this third person shooter with networking mechanics, and i’m getting this really weird issue. The player has a bIsDead bool and a Health float. The only places where these variables change are inside the TakeDamage function. Although, when i spawn a new player after a couple times, those variables are true and 0.f respectively, but they shouldn’t because the player hasn’t taken any damage yet. The TakeDamage doesn’t get called at all when this happens.
Could this have something to do with how i’m spawning the player? This is the way i’m doing it:

void ACodeReplicationGameMode::RequestNewSpawn_Implementation(AController * NewPC)
{
    AActor* Spawn = ChoosePlayerStart(NewPC);
    FActorSpawnParameters SpawnParams;
    //SpawnParams.bNoCollisionFail = true;
    ACodeReplicationCharacter* NewChar = GetWorld()->SpawnActor<ACodeReplicationCharacter>     (DefaultPawnClass, Spawn->GetActorLocation(), Spawn->GetActorRotation());
    if (NewChar) {
	    NewPC->UnPossess();
	    NewPC->Possess(NewChar);
	    NewChar->CustomBegin(NewPC);
	    NotifyAllPlayers(NewChar);
	    return;
    }
    //GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Failed attempt"));
    RequestNewSpawn(NewPC);
    return;
}

Inside the constructor, ACodeReplicationCharacter::ACodeReplicationCharacter():

MaxHealth = 100.f;
Health = MaxHealth;
bIsDead = false;

Inside the GetLifetimeReplicatedProps (yes both those variables are a UPROPERTY(Replicated or ReplicatedUsing)):

DOREPLIFETIME(ACodeReplicationCharacter, Health);
DOREPLIFETIME(ACodeReplicationCharacter, bIsDead);

You could put a logging message in the Character Constructor to confirm that it’s being properly called and not somehow overridden or overloaded. If you get the message and the character somehow spawns without those values, then it either isn’t being replicated properly, or it’s being modified somehow.

The constructor is being called properly with logs. Although, now that i notice, when this error happens, if i move the character that just spawned (the one that has bIsDead as true, although it isn’t really dead), all of a sudden, the other character can damage him, which means bIsDead is not true anymore… also checked that with DebugMessages… so if this character spawns with bIsDead as true but then moves, bIsDead stops being true…

So i solved this by, instead of spawning the new pawn manually, simply calling the PlayerController function called ServerRestartPlayer() after i destroy the pawn. The player will always spawn in the same location this way, but you can just change the newly spawned pawn’s location using the GameMode’s ChoosePlayerStart() function.