Nope, i checked the source PawnLeavingGame is called direcly on player controller destruction (which happens when player leave).
void APlayerController::PawnLeavingGame()
{
if (GetPawn() != NULL)
{
GetPawn()->Destroy();
SetPawn(NULL);
}
}
void APlayerController::Destroyed()
{
if (GetPawn() != NULL)
{
// Handle players leaving the game
if (Player == NULL && Role == ROLE_Authority)
{
PawnLeavingGame();
}
else
{
UnPossess();
}
}
As you can see there is condition checking if player really left (Player == NULL) and check if code runs on server (Role == ROLE_Authority), if player (the UPlayer object) still on server or playercontroller is not on server (which always will be) then it will unpossess insted.