I have the same issue. I think that this is because we now have two copies of our Address Book contacts- the local one (which is not synced to iCloud but can be synced to Google,Yahoo & Entourage) and the iCloud "account". Both sets of contacts share their birthday information with iCal on your main Mac. If you look at iCal on your iPad or iPhone the birthdays are not duplicated- because these devices are only working off iCloud.
It bothers our compulsive sides and Apple should offer a way to suppress the local AB birthday list on the local iCal, but it's not really doing any harm.
I have resolved the problem and it was exactly as you described. I was keeping duplicate addresses on My Mac in the interests of a backup should anything happen to them in iCloud.
It would be good if you had the option to do this with the ability to have iCloud changes/additions be implimented on you mac and vise versa. Plus whether you wanted your iCal to read Birthdays from the address book in iCloud or On My Mac.
We shall see what the future holds
I have a similar but different problem that I haven't seen addressed anywhere. I share my contacts with my son on icloud under two different icloud accounts. So that means that I have duplicate entries in my combined address book for some entries. Those entries then display brithdays twice in my ical. But the contracts that i do not share with him (thuse there is only one entry) only display once. On his ipod touch, it only displays 2 entry because it is only reading his subset of the contacts from icloud. But on my Macbook Pro it displays his and mine on ical. How can I get my ical to only read my contacts' birthdays and not his?