I had freebsd-6.1 lying on my disk for quite a few days.
Now, here is how you perform a binary upgrade to 6.2. Be sure to change the release tag from 6.2-RC1 to 6.2-RELEASE. You might also want to change the server to update1.freebsd.org.

After I did some research, I learned that -STABLE is better than -RELEASE, as a -RELEASE version is a cut taken from the cvs repository and never changes. -CURRENT is the most cutting edge version and could be dangerous. When a -CURRENT version is about to release (say, 6-CURRENT), it branches into 6-STABLE and 7-CURRENT. Releases like 6.1 and 6.2 are snapshots of the -STABLE branch. To install new system with -STABLE, I could have used the snapshots. To upgrade a running system, there isn't any binary upgrade afaik. You could follow the instructions here to grab the source and build it yourself.

To upgrade packages we could use portupgrade, as I've aleady noted. This is sort of like apt/emerge, because the raw pkg_add does not resolve dependency well, and it also refuses to update a package if you had an older one. You should fetch the latest ports index and update the portsdb routinely by running portsdb -Fu. Be sure to read the manual of portupgrade because it's a very powerful tool. By default, portupgrade -PP looks for packages that match your release version. You could override this behavior by setting the environment variable PACKAGESITE, an example being ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/.

To remove a package we could run pkg_delete, but pkg_delete refuses to delete a package if there're packages dependent on it. pkg_deinstall -r from portupgrade, or pkg_remove can get rid of all the dependent packages for you.

It's a good idea to exclude unwanted ports using /var/db/sup/refuse. This blacklist idea is better than whitelisting ports in /etc/ports-supfile, because there could be new categories added to the ports tree. For example, the ports management tools were in ports/sysutils but have all been moved to ports/mgmt. The file /usr/share/examples/cvsup/ports-supfile wasn't updated to reflect this change, which I thought would during the upgrade to 6.2.