The OOTB experience for code reviews isn't horrible (shelvesets work fine, in my experience), but there's not a good built-in way of tracking the code review process, especially the feedback given.

Over the last month or so, JBBrown has done a ton of work on TeamReview which aims to tackle this problem, both making it more structured, but at the same time much easier.

The "TeamReview by Example" on the project's main page does a great job getting across what a typical code review is like with TeamReview, and if you're doing code reviews (you should!) with TFS, this sure looks like a great way to go.  It's on my TODO list to try it out myself once the current queue of work gets flushed. :)