Thing is: sometimes an OS upgrade breaks things. Even if there weren't many features introduced. To test on a specific OS version, you need the actual device. The simulator, sometimes, isn't good enough. This is true specially for games.
3.0 -> 3.0.1 didn't break anything. 3.0.1 -> 3.1 has new APIs (particularly helpful for gaming), so if you want better frame rates on games, you need to write specific code for 3.1 and specific code for older versions. This is work. Sometimes a developer doesn't have the hardware/time to test on all possible OS combinations. Sometimes he just doesn't want to.
It's not dumb to support 2.2.1 and not 3.0/3.0.1, but support 3.1. It's actually a sale strategy.
2.2.1 -> 3.X is a paid upgrade for iPod Touch users, so lots of people will stick to 2.2.1.
3.0/3.0.1 -> 3.1 is a free upgrade for everyone. Anyone can do it and they SHOULD do it. So dropping 3.X OSes before 3.1 makes sense because it'll push people forward. And this won't cost anything to those people.