El problema lo más seguro es que venga derivado de la base de datos, de la codificación con la que esté configurada. Échale un ojo a eso a ver... prueba igualmente a volcar las cosas en UTF8, y acostumbra a usar mysql_escape_string / mysql_real_escape_string (ambas iguales, según la versión de PHP). A la hora de insertar registros en la base de datos, yo haría lo siguiente:
Código PHP:
$user = utf8_encode(mysql_escape_string($user));
$pass = utf8_encode(mysql_escape_string($pass));
Y para mostrar registros:
Código PHP:
$user = utf8_decode($row['user']);
$pass = utf8_decode($row['pass']);
Con esto consigues una codificación estándar UTF8. Y el tema de las Ñ en la contraseña, decirte que por lo general, se suele registrar la contraseña encriptada, no en texto plano, haciendo la comparación en el login de la real y la propuesta por el usuario, ya encriptadas. Por ejemplo, a la hora de insertar
Código PHP:
$pass = md5(mysql_escape_string($pass));
Y a la hora del login:
Código PHP:
if ($row['pass'] == md5($_POST['pass']))
Espero que algo te haya servido :)