This is the 2nd part of the “Greg Hudson” problem.
Again, suppose our working copy has directory DIR:1 containing file foo:1, along with some other files.
Now, unbeknownst to us, somebody else adds a new file bar to this directory, creating revision 2 (and DIR:2).
Now we add a property to DIR and commit, which creates revision 3. Our working-copy DIR is now marked as being at revision 3.
Of course, this is false; our working copy does not have DIR:3, because the “true” DIR:3 on the repository contains the new file bar. Our working copy has no knowledge of bar at all.
Again, we can't follow our commit of DIR with an automatic update (and addition of bar). As mentioned previously, commits are a one-way write operation; they must not change working copy data.
Let's enumerate exactly those times when a directory's local revision number changes:
If the directory is either the direct target of an update command, or is a child of an updated directory, it will be bumped (along with many other siblings and children) to a uniform revision number.
A directory can only be considered a “committed object” if it has a new property change. (Otherwise, to “commit a directory” really implies that its modified children are being committed, and only such children will have local revisions bumped.)
In this light, it's clear that our “overeager directory” problem only happens in the second situation—those times when we're committing directory propchanges.
Thus the answer is simply not to allow property-commits on directories that are out-of-date. It sounds a bit restrictive, but there's no other way to keep directory revisions accurate.