I took a look at the code and noticed that there doesn't seem to be any checking to see if the images are loaded before they are called. I just got done adding that into a simple slideshow I wrote from scratch and on a slow connection it makes all the difference in the world. The basic code to use is:
goim=true
if (x.complete==false)
goim=false
if (goim!==false){
document["kl"].src = x.src; //this is the display line
i=i+1;}
goagain();
'goim' is a variable created on the spot to test the .complete method without causing browsers that do not support it to choke (couldn't test that part). 'x' is a variable that contains the current image object about to be displayed. If it is in cache (x.complete==true) essentially, it is displayed. Otherwise it skips back to the preloading routine 'goagain()' without incrementing the variable 'i' that tells the preload routine what object and source to work on.(all the while the previous image is still on display).
While writing this it occured to me that the image is still loading, so why not just go into a waiting loop and check back from time to time. That would be even better.
I'm not sure if you can follow this logic but adding it made, as I said, a world of difference on slow connections. Without it things just piled up ontop of one another and got stuck (the browser never caught up), with it, it runs smooth as silk.
I took down your source and will, in spare time look into modifying it to include such a test, no promises. I can't even be 100% sure this will solve your problem but, it is a good avenue as the symptoms you describe are similar and the code lacks any check of this sort as far as I can see.