Om mysql_query returnerade NULL, skulle det vara en bugg på PHP. Hur vet du att det faktiskt returnerar NULL?
För uppdateringssatser ska mysql_query endast returnera TRUE eller FALSE. Så din felkontrollkod är bra. För att ta reda på vad som gick fel, måste du anropa en annan funktion - mysql_error() skulle ge dig en text om vad som gick fel. Så skriv ut värdet på mysql_error() i ditt falska block. Så här:
echo 'failed. SQL Err: '. mysql_error()
Gör det och du kommer förmodligen att få en ledtråd om hur "posten uppdaterades, men returvärdet är falskt". Det borde inte ha hänt.