In addition to what has been said, I will point out that IM has a way of retaining images in an internal stack, so when you read an image in, with the same IM object, it gets pushed into an array of images. You might try to clean out the IM object after each loop run to be sure
......
$x = $image->Write($photo);
undef @$image;
......
Even though you are calling a new IM object each time thru the loop, it may be that
the object is not "loop-safe" for some reason....possibly a bug or an old version that needs updating? But your symptoms point to this, and it's worth a try.