En XNA hay una SignedInGamerclase con un SignedInGamer.PlayerIndexmiembro que debería decirte exactamente eso si puedes obtener el SignedInGamerobjeto.
Para hacer eso, existe la Gamer.SignedInGamerspropiedad estática que contiene una colección de SignedInGamerobjetos basada en el estado actual del sistema. Esto es del Microsoft.Xna.Framework.GamerServicesespacio de nombres.
Con esta información, podría hacer algo como lo siguiente:
//If player 2 is connected
if (GamePad.GetState(PlayerIndex.Two).IsConnected)
{
//If we can't find a signed in gamer with a PlayerIndex of two
if (!Gamer.SignedInGamers.Cast<SignedInGamer>().Any(x => x.PlayerIndex == PlayerIndex.Two))
{
//Your handling code here
}
}