Para el caso de cadenas (strings) .. y usando arrays como es tu caso .. Emplea mejor un blucle foreach para recorrer dicho array .. El cual no hace mas q extrar en cada pasada del bucle un elemento (correlativo) del array hasta su último elemento .. 
   Código PHP:
    $sexo=$row["sexo"];
$sexo_nombres=Array("Masculino","Femenino");
echo "<select name=\"sexo\">\n";
foreach ($sexo_nombres as $sex){
   if ($sexo==$sex){
     echo "<option value=\"".$sexo."\" selected>".$sexo."\n";
   }else{
     echo "<option value=\"".$sexo."\">".$sexo."\n";
   }
}
echo "</select>\n";
} 
    
  En tu caso .. no te funcinoba porque estabas comparando en el IF .. una cadena ($sexo .. ) con el $contador q es numero .. Deberias usar el elemento q corresponda a ese indice en el array ..  
 Código PHP:
    $sexo=$row["sexo"];
$sexo_nombres=Array(1=>"Masculino","Femenino");
echo "<select name=\"sexo\">\n";
for ($contador=1; $contador <=2; $contador++){
   if ($sexo==$sexo_nombres[$contador]){  // <--------
     echo "<option value=\"".$contador."\" selected>".$sexo_nombres[$contador]."\n";
   }else{
     echo "<option value=\"".$contador."\">".$sexo_nombres[$contador]."\n";
   }
}
echo "</select>\n";
} 
    
  Si necesitas que tu "value" de tus options sea "1" y "2" .. usa el 2º código (el tuyo con el detalle q te comenté ..). Si necesitas el "value" de tus options como "Masculino" y "Femenino" .. usa el primer código ... 
Tambien asegurate que siempreee tus cadenas (strings) a comparar sean iguales .. Si una es "Femenino" y la otra es "femenino" (la del array por ejemplo y la otra la de tu campo de tu BD) siempre te dará el caso "else" del IF ..  
Una solución a esto (si es q no sabes como puede llegar tu cadena de tu BD) es convertirlo a minusculas por ejemplo amabas cadenas (el array lo tienes en minusculas por defecto .. y tu $row['sexo'] .. lo pasas a minusculas via strtolower() ...) 
Un saludo,