RF processes "invocations" (method calls) without knowledge of what they do, and their can be several such invocations in the same request (RequestContext).
Imagine I do:
ctx.foo(entity).fire(...);
RF will check whether 'entity' is still 'live', because it cannot know what 'foo' made of it: updated it? (version check) deleted it? (liveness check) or maybe just read it or simply ignored it?
Now with:
ctx.findAll().to(...); // will return the entity in the list
ctx.delete(entity).to(...);
ctx.fire();
Or:
ctx.saveAndCommit(entity).fire(...); // where the "working copy" will be removed after the "commit"
In all cases, RF will do the "liveness check" and then the "version check" to inform the client of which EntityProxyChange event to fire (WriteOperation.UPDATE or WriteOperation.DELETE).
Those checks are *only* there to inform the client of what RF thinks has happened (from its small knowledge, e.g. it won't tell you other entities –that the client already knows– have been updated/deleted unless they appear as arguments or return values, possibly nested in other entities/values).