That's a great piece of detective work. Well done!
I suppose it's possible that dm Server is leaking some type of file reader by failing to close them. You could wait until the problem manifests itself and then trigger a heap dump and use a heap analysis tool to see if there are a large number of lives objects corresponding to readers, input streams, etc.
I guess the rate of such a leak would be affected by the number of files that dm Server processes. Do you have a particularly large number of artifacts either in pickup or in repository/usr (which is a watched repository and therefore scanned periodically)? Bit of a long shot, but worth asking.
Please come back when you need more ideas. If this could be captured in a testcase, then we could look at it.