My Kindle shipped with firmware 3.0.2. I wanted to upgrade to 3.1 to get real page numbers. When I got the Kindle I jailbroke it, installed usbNetwork and the screensaver hack.
Every time I tried to upgrade the firmware it would fail. After some searching I found that the firmware updates ship with differential updates. If any of the core files are modified the update will fail in order to prevent mucking something up.
An easy way to figure out what file is causing the upgrade to fail is:
You can then search through the file created on the Kindle for the file with a checksum failure.
In my case /etc/sysconfig/iptables was modified. Someone posted a stock copy of the file, once I removed the the single line that was different in mine the update applied without issue.