Nix discovered this one last night: I only fixed his code after I figured out why it was happening.
DM allows you to override image objects, but unfortunately, New() and Del() overrides are never actually called. They just silently fail.
Also, I've been unable to replicate the issue in a blank project, but Nix and I noticed that his project had a progressively worsening leak. The issue was related to using image objects as overlays. They were socked away into a global list and then the global list was assigned to an overlays list. I'm not at all sure how to reproduce it, but we basically discovered in some rare cases, Images were not being deleted despite being instructed to be explicitly deleted.
Code Snippet (if applicable) to Reproduce Problem:
var/imagecounter = 0
image
Del()
imagecounter--
..()
New()
imagecounter++
..()
Expected Results:
You should see imagecounter increasing and decreasing with the number of images in the world.
Actual Results:
Imagecounter never increases or decreases at all.