It would be nice to separate checking that files are in the cache when they should be, and checking invariants that must be true. Invariant checking could be a slow background process that does a few ops and then sleeps.
I have a similar usage pattern, but smaller. I have about 350 MB in my coda directory, and a 500 MB cache. I keep all of it in cache via walking the tree because hoard seems to be broken. So I may not be hitting the case you are. I think the view is that what you are doing is reasonable and that if coda the codebase doesn't cope now it's a bug.