To reproduce (tried it on drupal 4.6 demo page):
- Create a contact, enter an address ( of the location type "billing") and check the box "Billing location for this contact"
- Use an event or contribution page that requires a billing address to register sign up that contact and provide a billing address
As a result, a second address will be created (location type: billing) but both addresses will be marked as "Billing location for this contact". A short term solution would be to uncheck any existing addresses marked as "Billing location for this contact" before actually adding a new one.
In the long run, I think it is necessary to change the way billing addresses are handled - having both a location type and a checkbox is very confusing and can lead to serious problems. I started a SE question and will create a separate issue for that topic.