Value of an UNSET NEW.Column in Before Update Trigger
Maybe mysql documentation  is not so clear, but NEW is in fact refers to pseudorecord which contains new values (let's ignore access right for simplicity).  It's probably more accurate to say that it gives you access to the row as it will be stored in the table , whereas OLD gives access to the row as it was right before UPDATE/DELETE executed.
Keeping that in mind, comparision in trigger body OLD.PASSWORD &lt;&gt; NEW.PASSWORD  will be true (assuming "password" field is not null, otherwise you need to use IFNULL or something similar) only if PASSWORD field was actually changed by UPDATE statement.