Encontrou o problema. quando eu fiz isso:
echo strlen($hash)
imprimiu 90, o que é estranho porque definitivamente não havia espaços no final quando imprimi a mensagem de sucesso/falha, e o campo tem um comprimento varchar de 255
Eu adicionei esta linha:
$hash = substr( $hash, 0, 60 );
E agora funciona bem.
É estranho que ninguém mais parece ter se deparado com esse problema. Existem posts semelhantes sobre password_verify, mas nenhum deles exigiu esse tipo de conversão, ou qualquer conversão para esse assunto:
php password_verify não está funcionando
password_verify php não corresponde
http://forums.phpfreaks.com/topic/ 283407-precisa-de-ajuda-com-password-verify/
Usando a função password_hash e password_verify do PHP 5.5
Uma coisa que me incomoda é que isso impede que o código seja compatível com versões futuras. Como saberei que o hash tem 60 caracteres quando o padrão for alterado?