Porque o bcrypt gera um salt aleatório novo a cada execução e o embute no início do hash. Isso é proposital: dois usuários com a mesma senha terão hashes diferentes, o que impede ataques por tabela (rainbow tables). A verificação usa o salt que está dentro do próprio hash, então funciona mesmo com o valor mudando.