I've seen this twice on D3 and both instances were a considerable time ago.
The first instance was a runaway phantom process which was eating disk space whilst creating a report. From memory, terminating the process released the space and the code was modified to prevent it happening again.
D3 have since introduced the "set-runaway-limit" command to prevent just this situation. What are your runaway process value traps set at? Do you have any code that disables these by setting it to zero system wide, on a specific PIB or on the current port?
Providing "set-runaway-autoquit" isn't in effect, when a process consumes more frames than the maximum values it should halt the process and issue a prompt along the lines of "Runaway process detected (continue/quit)?" As suggested, "Continue" allows the process to continue (until the same number of frames have been eaten again when the prompt returns) whereas "Quit" aborts the process, returning the frames to the system.
The second instance was a glitch in the free space / overflow table. (I'm sorry, it was a long time ago and I can't remember precisely which.)
What I do remember is that there was a discrepancy between output of the "free" verb and the "povf" verb.
As Rocket have suggested, the lost space was recovered when doing a full save and restore using ":files".
Hope you get it sorted.
With Kindest Regards
Mike Wooding