IMO, the -e option to emerge should not assume that it is OK to upgrade/downgrade packages, but should simply be an instruction to build the currently installed versions of all packages. This would allow us to rebuild an entire system with new flags, without having things complicated (and possibly broken) by installing upgrades. Let's assume I want to try some new CFLAGS. Ideally, it would be useful to first do an emerge -eB -- deep world to generate binaries for my system in it's current state. I can then archive these binaries and experiment with new flags. If it goes wrong, I simply restore the system from the archived binaries. Unless I specifically pass the -u flag, I do not want Portage to assume that it is OK to upgrade my packages; I sometimes have very good reasons for not upgrading, and should not have to jump through hoops to prevent upgrades.
*** Bug 17827 has been marked as a duplicate of this bug. ***
Just found out that emerge <package> with no flags is also an implied update. Please stop this madness now. Only update if we say 'update' with the -u flag. Please make it easy to rebuild an existing system with updating versions. Please, please please!
-u has some side-effects on dependencies and most people are happy with the current solution.