I'm using a Holux M-241 and whole range of free software under Windows/Cygwin.

* Adjusting time: [ExifTool][1] (multi-platform) or [XnView][5] (Windows)
* Downloading from device: [BT747][2] (Java, writes to GPX or KML (latter for tracks in Google Earth))
* Tagging the images: [GPSphoto.pl][3] (Perl, so Perl and [ExifTool][4] needed)
* Checking: [XnView][5] (Windows: opens Browser-link to [Geohack][6] with coordinates)
* Adjusting manually: [Geosetter][7] (Windows: uses ExifTool again)

ExifTool has the advantage that it writes about the best approximation of XMP/IPTC/EXIF to the files (and compatibility to file formats, as @gordoco mentions).

GPSPhoto is actually quite versatile for tagging/retagging with different time-windows and time-offsets and offers to write some other data with ExifTool while one already is on it.

  [1]: http://www.sno.phy.queensu.ca/~phil/exiftool/
  [2]: http://sourceforge.net/projects/bt747/
  [3]: http://sourceforge.net/projects/gps2photo/
  [4]: http://www.sno.phy.queensu.ca/~phil/exiftool/
  [5]: http://www.xnview.com/
  [6]: http://toolserver.org/~geohack/
  [7]: http://www.geosetter.de/