"Why is rpm broken like this?"
I think that the problem is that at some time in the past you ended up with multiple registrations of the same rpm package and have never cleaned things up all the way. I have had the problem of multiple registrations before and have a method to clean them out of the rpm data base:
First create a listing of every rpm in the rpm data base:
rpm -qa | sort > /root/every.rpm.txt
Look through every.rpm.txt and find every rpm that appears more than once. Collect the current version of these rpm packages someplace handy. Check to make sure that none of the packages are needed by the rpm package:
rpm -qR rpm
Get rid of the problem rpms by issuing:
rpm --nodeps -e problemname
over and over until rpm tells you that the rpm is not installed
Then install the current version of that rpm with:
rpm -if /handyplace/rpmname.rpm
After you have cleaned out all of the duplicate names then run:
and it should do a neat job of rebuilding your data base this time.
Be prepared. Create a LifeBoat CD.