ho incontrato anch'io un problema del genere e ho risolto mettendo prima l'associazione degli eventi e poi l'impostazione del src. Prova a vedere se funziona.
codice:
<script type="text/javascript" language="javascript">
/*<![CDATA[*/
var immagini=new Array()
var total; // Totale immagini da preparicare
var cc=0; // Contatore Immagini già precaricate

function changePage(){
     if(cc>=total){location.href= "home.asp";}
}

function preload(){
     total=preload.arguments.length; // Totale immagini da preparicare
     for (cont=0;cont<total;cont++)
     {
          immagini[cont]=new Image();
          if(preload.arguments[cont]=='intro.jpg'){
                  immagini[cont].onload=function(){cc++;
                                      setTimeout("setInterval('changePage()',1000)",1000);
                                                          }}
          else{immagini[cont].onload=function(){cc++;}}
          // Ora associo il src
          immagini[cont].src=preload.arguments[cont];
     }
}

function Caricate(){
  preload("zona1_a.png","zona1_b.png","zona1_b2.png","zona3a.png","zona3b.png","zona2_a.png","zona2_b.png","zona2_c.png","intro.jpg");
}

window.onload=Caricate

/*]]>*/
</script>