Era muy simple:
- En el formulario estabas pasando el hash en md5 que ya tenías en sesión

- En tu script anterior pasabas el valor de la sesión ¿sin haber iniciado sesión antes?

- Al final en tu script que recibía ambos datos la comparación siempre fallaba y por ende el "error"
Un error grave fue pasar el valor del hash, que en teoría es secreto y el usuario no debería saber de él.
Otro error bastante común es no iniciar sesión con session_start() adecuadamente en los scripts que la usaban.
Saludos.