So the version of libgpod that's available in portage, 0.7.2, has some issues that prevent it from working correctly with newer iPods (my new iPod Classic 3G 160GB, for example). This is how to get it working such that Amarok (or, really, whatever other application that uses libgpod) can copy music to your iPod successfully.
(The problem was made apparent courtesy of this patch, this patch, and "teuf" in #amarok on irc.freenode.net)

All of these commands will need to be run as root, unless otherwise specified.

Step 1: Plug the iPod into a machine running iTunes and restore factory settings (this may or may not be necessary, but is worth a try if the rest of this doesn't work for you).

Step 3: Put this ebuild in (your local overlay)/media-libs/libgpod/
Warning: This ebuild just installs the latest git snapshot / development tree of libgpod; it isn't exactly guaranteed to be stable and might break things. It works just fine for me, but that's no guarantee it'll be stable for everyone.

Step 5: Install the new git-based version of libgpod via "emerge -av =media-libs/libgpod-9999" (this works fine on my machine running ~amd64; if bugs are encountered let me know and I can update the ebuild or whatever else is necessary).

Step 6: Rebuild Amarok or whatever other software you use -- revdep-rebuild should be able to do this for you, or "emerge -av amarok" or whatever.

Step 7: We need to set the FWGUID on our iPod so that libgpod will work correctly. There are two different methods to do this. All of the commands for this step can be run as a non-root user or as root -- since the iPod's filesystem is FAT32 permissions aren't preserved so it makes no difference.
(This info is taken from here: http://gtkpod.wikispaces.com/Sysinfo+File#ClassicNano3g)
This step only needs to be performed once! After you set the FWGUID and create the SysInfo file, your iPod should work just fine every time you plug it in and copy songs / whatever else after that.

Step 1: Find out what the FWGUID is by running "lsusb -v | grep -i Serial"

Step 2: The FWGUID is a 16-character (or longer, for certain models of iPod) hex string.

Step 3: Add the following line to (ipod mount point)/iPod_Control/Device/SysInfo:
FirewireGuid: 0x[THE-FIRST-16-CHARACTERS-OF-THE-FWGUID-STRING]

If you want to test that the FWGUID is set correctly / check that libgpod can find it (this is almost certainly not necessary, especially if Method #1 didn't return any errors):
(This section can be done as a non-root user if you want to.)

Step 4: Run: ./tests/test-firewire-id (ipod mount point) -- this should display the 16-character FWGUID hex string if it worked correctly.

Step 8: Start up Amarok (or whatever other program you use).

Step 9: Copy tracks over / whatever else you want to do.

To safely eject the iPod:

Step 1: Click the eject button in Amarok (other programs might not have a button specific to them; if there is one, click it, if not, meh)

Step 2: Unmount the iPod.

Step 3: Run: eject (ipod device)

And you're done; all the tracks that were copied should show up just fine. If they don't for some reason, restarting the iPod (via holding the middle button + menu or whatever) might help. So far the only issue I've experienced is that album artwork doesn't get displayed on the iPod, but this might just be due to me failing / Amarok not supporting it / whatever.

It seems that the latest git version of libgpod needs libplist. This is in portage, app-pda/libplist, but for some unknown reason it is keyworded only for '~amd64'. I made another overlay for this ebuild and added the '~x86' keyword. Then I emerged libplist, emerged libgpod and followed the rest of the instructions.