I don't see anything wrong with removing the dynamic interceptor on eviction. In fact, regardless of the concurrent read case, I think the dynamic interceptor not being removed on eviction is a bug. Jason? Thoughts?
I'd have to look at the code again, but the interceptor should probably remain, otherwise susequent calls on the object will return the object's field (instead of the cached version) which would be indeterminate.
With the current code, the moment the pojo has been evicted and you call one of it's set/get methods, the cache interceptor will be removed, so the indeterminism is already present, even before the suggested change.
If we're gonna fix the indeterminism at some point, we'll need some option to cope with both scenarios, since there might be users already relying on this.