php password_verify no funciona con la base de datos

Estoy usando php 5.4 con este script de compatibilidad con versiones anteriores:https://github.com/ircmaxell/password_compat/blob/master/lib/password.php

Sin embargo, eso no debería importar, porque puedo hacer que el proceso de hash y verificación funcione en mi función de registro:

$hash = password_hash($pass, PASSWORD_DEFAULT);

echo $pass;
echo $hash;

if( password_verify($pass,$hash) )
    echo 'success';
else echo 'failure';

//success is always shown

//EXAMPLE INPUT
$pass = 'password';

//EXAMPLE OUTPUT
password$2y¿Cómo reformateo el valor de SQL para que coincida con la salida de password_hash? Esto es lo que he intentado:JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSsuccess

pero cada vez que intento almacenar el hash en una base de datos MySQL y luego recuperarlo para la función de verificación, siempre falla. Aquí está mi función de inicio de sesión:

function user_login( $mysqli, $email, $pass ){    

        $err_msg = 'login: '.$mysqli->error.' | '.$email;

        if( $stmt = $mysqli->prepare('SELECT password FROM users WHERE email=?') ) :

            if( !$stmt->bind_param('s', $email) ) log_sql_error( $err_msg );
            if( !$stmt->execute() ) log_sql_error( $err_msg );
            if( !$stmt->bind_result( $hash ) ) log_sql_error( $err_msg );
            if( $stmt->fetch() === FALSE ) log_sql_error( $err_msg );
            if( !$stmt->close() ) log_sql_error( $err_msg );

            //I can see that these values are identical to the ones
            //echoed out in the registration function
            echo $pass;
            echo $hash;

            if( password_verify($pass,$hash) )
                echo 'success';
            else echo 'failure';

        else : log_sql_error( $err_msg );
        endif;
}
//failure is always shown

//EXAMPLE INPUT
$pass = 'password';

//EXAMPLE OUTPUT
password$2y¿Cómo reformateo el valor de SQL para que coincida con la salida de password_hash? Esto es lo que he intentado:JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYSfailure

Mi columna 'contraseña' tiene este tipo de datos:VARCHAR(255) NOT NULL

No se muestran errores de php, por lo que lo único que puedo pensar es que el valor hash no está formateado de la misma manera cuando sale de la base de datos que cuando entró, pero cuando hago eco de los valores, parecen estar idéntico.

¿De qué otra manera puedo depurar esto / qué está mal con mi código?

Gracias

ACTUALIZAR:

Esto definitivamente tiene algo que ver con la codificación:

$hardcode_hash = '$2y¿Cómo reformateo el valor de SQL para que coincida con la salida de password_hash? Esto es lo que he intentado:JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS';

echo $hash;
echo '<br/>';
echo $hardcode_hash;
echo '<br/>';

if( $hash == $hardcode_hash )
    echo 'success';
else echo 'failure';

//OUTPUT
$2y¿Cómo reformateo el valor de SQL para que coincida con la salida de password_hash? Esto es lo que he intentado:JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
$2y¿Cómo reformateo el valor de SQL para que coincida con la salida de password_hash? Esto es lo que he intentado:JK1jumvvSIm/gP3fWE3k9O98MzvHKDRYCjRPBniYg9riACyQw7WYS
failure

¿Cómo reformateo el valor de SQL para que coincida con la salida de password_hash? Esto es lo que he intentado:

(string)$hash
utf8_encode($hash)

si lo hago:

$hash = settype($hash,"string");

if($hash == $hardcode_hash) devuelve verdadero, peropassword_verify($pass, $hash) todavía devuelve falso

Respuestas a la pregunta(4)

Su respuesta a la pregunta