Saving doesn't melt them on. Ex; for an Unequip verb, when you remove the path or file of the overlays it goes off. (For me it does o.o). Another way would be to save the mobs original icon.
<dm>
mob/var/origicon
mob/verb/Add_Overlay()
usr.origicon=usr.icon
usr.overlays+='overlay.dmi'
mob/verb/Delete_Overlay()
usr.icon=usr.origicon
//or
usr.overlays-='overlay.dmi'
Of course, adding and removing overlays with a special verb would be ridiculous. Doing so via a proc, where you'd be using src instead of usr, would not be.
Ive tried the loop, it seems to be removing them in my test. src.overlays = null sometimes doesnt remove the overlays (according to my games). Your overlays are a list, and it goes into that list and takes each overlay, so it should work.
It's fixed like that. Instead of adding objects to the overlays/underlays list, add them to the Overlays/Underlays list then call the corresponding updating procedure.
<dm>
mob/var/origicon
mob/verb/Add_Overlay()
usr.origicon=usr.icon
usr.overlays+='overlay.dmi'
mob/verb/Delete_Overlay()
usr.icon=usr.origicon
//or
usr.overlays-='overlay.dmi'