The simplest difference is that tags are unique, stamps are not.
Only one changeset can have a specific tag (such as `RELEASE_1_0`); attempting to apply that tag to another changeset without removing it from the first will cause an error.
Multiple changesets can share the same stamp, however - you might have several branches in a `QA_REVIEW_NEEDED` state, for example. Our team use a "`goodbuild`" stamp on any changeset which successfully built and passed automated unit tests.
Stamps can also be applied to work items, whereas labels tags are specific to version control.