Creo que he acabado de estropearlo. Antes por lo menos tenía un comportamiento predecible, ahora hace lo que quiere 

Este es el código actual:   
Código Javascript
:
Ver originalhover : function(toDo){
            return this.evento('mouseover', function(e){
                var from = e.relatedTarget || e.fromElement;
                !this.esPadre(from) && toDo.call(this, e);
            });
        },
out : function(toDo){
            return this.evento('mouseout', function(e){
                var to = e.relatedTarget || e.toElement;
                !this.esPadre(to) && toDo.call(this, e);
            });
        },
esPadre : function(hijo){
         var padre = hijo.parentNode;
            while(this != padre){
             if(padre.tagName.toLowerCase() == 'html'){ return false; }
                padre = padre.parentNode;
            }
            return true;
        }
  
El ejemplo sigue estando en el mismo sitio, por favor échale un vistazo 

Saludos y gracias :D