One very small annoyance that we were hitting regularly in TFS 2008 was trying to diff file which didn't have pending change. Assuming that we want to see changes checked in on a server, we would need to specify some less than trivial parameter:

"tf diff foo.txt;W~T"

If there was a pending rename involved, it would fail and we will need to specify both paths separately:

tf diff foo.txt;W~T
Item $/michal1/foo.txt was not found in the current workspace.

In TFS 2010 we hide all those "ifs" and "unless":

tf diff foo.txt
Comparing local to latest: e:\ws\foo.txt

So what we do? Whenever user specifies single path which doesn't have pending change, we are comparing local file to latest version on the server. We gracefully handle pending changes and different encodings.

When we don't do it? Whenever user specified /r (recursive) or wildcard (*) - we don't want to start diffing unknown number of files. Please just use folderdiff for that.