なんだかその辺をググるとsubtreeラブな話が多いんだけど...。
subtreeを使う方がいい場合
subtree-mergeと呼ばれるようにマージしちゃうので修正を元のリポジトリに戻すのが面倒だが、マージした結果がリポジトリに含まれるので親リポジトリをcloneした時点で中身が入っている。
subtreeで取り込むとマージされてしまうのでsubtreeを使うのは 取り込むリポジトリに修正を戻さない場合 に限定するほうが良さそうだ。 変更をリポジトリごとに分類するのは人力 なので。
それと取り込んだリポジトリのアップデートを追う場合、取り込んだブランチでpullしてからそれを再マージすることになる。
submoduleを使う方がいい場合
リポジトリを取り込んでもリポジトリは分離されたままなので 取り込んだリポジトリに修正を戻す場合 はsubmoduleの方がずっと使い勝手がいい。subtree-mergeみたいに変更が混ざってしまって 人力で分離しなければならない ということもないし。
取り込んだリポジトリのアップデートに追随するのは一度ブランチを取り込んでおけばsubmoduleの方でpullするだけでいいし、変更はsubmoduleの方で為され、その変更を送るのも普通にpush。というように本当に普通の操作でできる。subtree固有の操作は親子関係に関することだけだ。
それと、submoduleの場合の「updateしないとソースが入ってない」という「欠点」はmakefileにでもupdateする文を書いておけば解決してしまうのであんまり欠点っぽくない。
結論
結局のところ大抵の物事と同様に、得手不得手を把握して使い分ければいい。という身も蓋もない結論になるわけだが、個人的にはsubmoduleの方が好み。subtreeの混ざるというのが気持ち悪いので。