OK, I think I've found something.
In the new version, pages are set to charset UTF-8.
In the old version, they are set to iso-8859-1.
That means that when the form data is POSTed, if the passwords contains special chars that have a different representation in 8859-1 and UTF-8 (say character "à" or "ê"), they get converted to a different binary representation.
All the hashes in my database have been computed using the 8859-1 representation of the password strings. This means that switching to UTF-8 breaks password verification for anyone using a character with different 8859-1 and UTF-8 representation.
In punbb 1.2, most pages use <pun_char_encoding> which is dynamically replace by $lang_common['lang_encoding'] which is defined as 'iso-8859-1' in common.php.
In punbb 1.4, if I'm not mistaken, the charset is hard coded in header.php, in main.tpl and in the form themselves. I'll have to try to revert everything to 8859-1 to see if I can get the right hashes…
Shouldn't everyone doing the migration face this issue? Or maybe people don't often use special chars in passwords?