I haven't had a chance to test this theory yet, but it makes so much sense...
When doing get bulk requests (which are done once for each modem on all non-intensive scans in Cinemon), the default behaviour for an agent is to encode 255 records for each requested field. That is, if you are requesting 10 oids, you wind up with 2550 possible data-values coming back at you.
Now, of course there's also the packet-size limitations, but basically by default you're downloading large chunks of the OID table each time you do one of those get bulk requests.
Obvious solution (now available in TwistedSNMP) is to allow for passing in the maxRepetitions parameter, so that when you know you have a small table you can tell TwistedSNMP's table retriever to use a smaller window and save the bandwidth and processing power.
Oh, other good news; apparently the cleanup did have some effect after all. cmon's memory usage has flatlined (or as close as I can see to flatlined on the graph) for 2 hours now. IIRC it's actually set to trim the data to the last 2 minutes (to speed up time-to-stability), which isn't very useful, but it does show that the memory-releasing mechanism is working.