Ok, if it is a DualImage.php generated image that's 'broken', it is usually due to a server-load limitation (too many PHP processes for an individual account) -- it usually results in the image having a 500-Server Error return, which has no image embedded.
I've run into this on my own site when I had lots of scripts on various pages that were loading images and caching them dynamically (like the good 'ol Space Weather page). I had to switch that page to loading the image cache files directly, and using a cron job to execute the cache set of image-space-*.php scripts instead of having them in an <img src="image-space-*.php"> set.
As time has gone on, various shared-service webhosters have been cranking down the number of concurrent PHP processes allowed and the symptom on a site is randomly occurring 500 errors for PHP scripts.
Check your access_log (and error_log) for the site and look for 500 error codes to see which scripts are involved.
Regarding the missing images, there's not a good substitute for the DualImage.php script (which is itself very low overhead, but does use the GD library for image handling), so that's one script you shouldn't replace with a cron-run cache script. The image-*.php ones are generally good to be run via cron (and the referring pages switched to using the .jpg/.png cached file instead).
Hope this helps...