Yo diría que el problema es que una fila como "Empty set" contabiliza como tal, y por lo tanto te entra en el else.
Prueba esto:
Código PHP:
<?PHP
// Se obtienen los parámetros de conexión enviados desde el POST
$name = $_POST['taname'];
$pass = $_POST['tapass'];
// Conectamos como el usuario que tiene permisos para crear otros usuarios
$con = mysql_connect ("localhost", "root", "root");
if ($con){
mysql_select_db ("db_discos", $con);
// Si hemos conectado correctamente, comprobamos que el usuario no exista en la BD
$res = mysql_query ("SELECT nombre FROM db_discos.usuarios WHERE nombre='$name' LIMIT 1", $con);
$row = mysql_fetch_assoc($res);
if (!empty($row['nombre'])){ // Se ha encontrado al menos un usuario con el mismo nombre
echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">El usuario de nombre $name ya se encuentra registrado en el sistema.<br>Regístrese con otro nombre.<br>En 5 segundos volverá a la página de entrada. RESULTADO: $num</font></div></body></html>";
}
else{ // En este caso no se encontraron usuarios con el mismo nombre. Lanzamos la secuencia para dar de alta
mysql_query ("GRANT SELECT, INSERT, UPDATE ON db_discos.discos TO $name IDENTIFIED BY '$pass'", $con);
mysql_query ("INSERT INTO usuarios (nombre, password) VALUES ('$name', '$pass')", $con);
echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Registro completado satisfactoriamente ($name, $pass).<br>Ahora puede usar su nombre y contraseña para acceder.</font></div></body></html>";
}
}
else{ // En este caso no hemos conseguido conectar
echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Lo sentimos, no se ha podido conectar con la BD.<BR>Reinténtelo de nuevo en unos minutos.<br>En 5 segundos volverá a la página de entrada.</font></div></body></html>";
}
mysql_close ($con);
?>