Encontré el problema. cuando hice esto:
echo strlen($hash)
imprimió 90, lo cual es extraño porque definitivamente no había espacios al final cuando imprimí el mensaje de éxito/fracaso, y el campo tiene una longitud varchar de 255
Agregué esta línea:
$hash = substr( $hash, 0, 60 );
Y ahora funciona bien.
Es extraño que nadie más parece haberse encontrado con este problema. Hay publicaciones similares sobre contraseña_verificar, pero ninguna de ellas requirió este tipo de conversión, o ninguna conversión para el caso:
php password_verify no funciona
password_verify php no coincide
http://forums.phpfreaks.com/topic/ 283407-necesito-ayuda-con-contraseña-verificar/
Uso de la función password_hash y password_verify de PHP 5.5
Una cosa que me molesta es que esto evita que el código sea compatible con versiones posteriores. ¿Cómo sabré que el hash tiene 60 caracteres cuando cambie el valor predeterminado?