One thing that tripped me up initially when using submodules was if you replace a real directory with a submodule, and try to checkout a branch from before the switch, it will conflict.
Since the submodule tree isn't part of the main project's tree, it's not removed when you checkout another branch. It's basically like an "untracked" file. Kind of like it's in git purgatory.
Thanks for posting that! It deserves a separate HN submission if one doesn't exist yet. I really hope this 'git subtree' utility makes it into the git mainline. It does not exactly replace working submodules, but it seems exceedingly useful for extracting code out into libraries while preserving history.