I'm using a Holux M-241 and whole range of free software under Windows/Cygwin using Cygwin for Perl and Co.
- Adjusting time (if I forgot to synch camera/gps): ExifTool (multi-platform) or XnView (Windows)
- Downloading from device: BT747 (Java, writes to GPX or KML (latter for tracks in Google Earth))
- Tagging the images: GPSphoto.pl (Perl, so Perl and ExifTool needed)
- Checking: XnView (Windows: opens Browser-link to Geohack with coordinates)
- Checking/Adjusting manually (eg viewing direction): Geosetter (Windows: uses ExifTool again)
ExifTool has the advantage that it writes about the best approximation of standard 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.