Solved by OODavo on the #xmonad IRC channel. Turns out the latest xmobar package on Arch (0.16-3) simply has a bug in it that breaks the avoidStruts layout. The workaround is either to downgrade to the previous version, or to build the latest version from git.
Previous version of the package: http://arm.konnichi.com/2012/12/02/community/os/x86_64/xmobar-0.16-1-x86_64.pkg.tar.xz
Instructions for downgrading packages in Arch: https://wiki.archlinux.org/index.php/Downgrading_Packages#How_to_downgrade_a_package