You're just not using the correct syntax when calling it. In this case, it tried to do a diff between your working copy, and the base repository version, of (non-existing) files 14318 and 14317.
What you need to do instead is to use a changeset range in /version, like this:
tf diff $/Foo /version:C14317~C14318 /recursive /format:unified > foo.diff
Note that you can use ~ with any other version specs - labels, dates etc. See here for details.
Pavel Minaev
2010-01-30 00:13:42