The problem manifests itself as a continuous stream of bad UDP checksum errors when monitoring network traffic with Wireshark. In particular, every DNS request my system sent had an invalid checksum error. I did not bother to check for the same problem with other traffic types. In any case, I found a bug report describing this exact issue:
Apparently it is very easy to turn off the checksum offload feature using this command:
sudo ethtool -K eth0 rx off tx off
After this modification, my packets are no longer broken!