BlockDiskCache overwrites data, that were loaded from disk, so when they are written back to disk and accessed again - cache is corrupt.
See the test case patch below for reproduction.
I've also attached patch for BlockDiskCacheKeyStore verification. It validates, that all blocks belong only to one key.
I've also proposed a patch to fix this, but it breaks some other unit test. I haven't check them, so I'm not sure, if this is correct approach