Blocking DEPENDs that start with '!' are ignored when running emerge -u. If the -u is dropped, the depends take effect. This appears to be due to the fact that the test on line 577 of emerge fails: if myparent and self.mydbapi[myroot].match(mykey): I see that emerge -u uses a fakedbapi, as opposed to a vardbapi, which I think accounts for the disparity. One possibility for a fix would be to change that line to: if myparent and vardbapi.match(mykey): ...but I don't know if that is a good idea or would have other side-effects.
It's odd that it doesn't work... Changing it to vardbapi will break alternate roots, aka LiveCD/Stager scripts.
Actually... Rac was partially right, and so was I. :) if myparent and (self.mydbapi[myroot].match(mykey) or vardbapi.match(mykey)): Fixed in cvs for >=49_pre8
*** Bug 24652 has been marked as a duplicate of this bug. ***