Lo que sucede es que HTMLImageElement (no HTMLImgElement) no es un objeto javascript normal (nativo o definido por el usuario) sino un objeto de tipo host (los objetos pueden ser nativos, host o definidos por el usuario). Los objetos de tipo host no tienen la obligación de comportarse como objetos normales y depende de cada navegador la forma de implementarlos. Por eso es una pésima idea alterar su prototipo. Este enlace quizá pueda dar una idea más clara acerca de esto:
http://perfectionkills.com/whats-wro...nding-the-dom/