Hola:
Lo que pasa es que cuando programas el evento load de tu imagen, seguramente ya esté cargada..., y es justamente ese el problema del evento... además podría cargarse desde la caché, así que seguro que más adecuado sería ponerle a la url un parámetro aleatorio para que no las cargue desde la memoria...
imagen = new Image();
imagen.onload = function() {
alert('imagen cargada...');
}
imagen.src = "imagen.jpg?azar=" + Math.floor(Math.random() * 9999);
Esa secuencia es la que asegura la mayor eficacia, aunque consultar el atributo complete podría mejorarlo (aunque suene absurdo)
if (!imagen.complete) imagen.onlod = function() {
//...
}
Aunque la secuencia podría estar con el orden de asignación cambiado.
Saludos