The working revision is bumped on every update for every node not explictly
updated by the update editor as part of the update finalization. The last
changed information is only updated by the update processing and by the post
commit processing. As the commit processing only applies to nodes explicitly
touched by a commit and then by url instead of by local path it is very hard
to process nodes in a generic way like you suggest.
(The last changed values are always determined by the repository, never the
client for several reasons)

Yes it is very easy in the common way where you just recursively commit the
working copy root and everything below, in a single revision working copy
without switched paths. But in general we don't have easy working copies
this easy.

Creating separate code paths for the easy and hard cases makes it even
harder to test this code than it is today. Since 1.6 things certainly
improved as I think the last revision for leaves in the working copy (files,
symlinks, etc.) is ok now, but fixing all the corner cases around parent
directories that are or aren't op roots is not something I could even
calculate how much time it would cost.