THe main difference in my opinion is, that Subversion supports (only) a real optimistic locking strategy, that means you normally work in parallel with each other, and the second (and later ones) have to merge their changes to the ones of the others.
In TFS you have to first checkout, that means, reserve the file for your changes, to do any work. This leads to a more pessimistic locking strategy.
And yes, one big difference is, that working offline is not an option with TFS, and perfectly supported by Subversion.
TFS has in my opinion better support for branching and merging (at least the UI helps a lot here).
TFS and Subversion have different terms with similar meanings when committing / checking in. (The following comes from a co-worker which has worked with both tools.)
Def: Revision:
An svn commit operation publishes changes to any number of files and directories as a single atomic transaction -> http://svnbook.red-bean.com/
Def: ChangeSet:
A changeset is a logical container in which Team Foundation stores everything related to a single check-in operation, specifically: file and folder revisions -> http://msdn.microsoft.com/en-us/library/ms181408%28v=vs.80%29.aspx
During CheckIn every File is associated with the CheckIn Number (counted up as in Subversion). If you browse the history of a folder / file you can see the history as a table with columns: changeSet Numbers / date / comment A nice feature from my point of view is the @Annotate function. With this function you can see the changesets of one file on LOC level (line 2-5 was changed by changset 2 "Adding logging, line 10 was changed by changset 5 "Check for null values" ;-) )