Solution found at:
macosxhints.com - About duplicate contacts and calendars on iPhone 3.0
...and I've added some extra stuff (such as restarting phone) which seems to be necessary.
1. On the iPhone, delete the MobileMe account
2. Shut iPhone down completely.
3. Wait 30 seconds
4. Restart iPhone.
5. Set up MobileMe account again and set it to sync calendars & contacts (and anything else you want)
6. iPhone will say there are existing records; state you want to MERGE data.
7. Wait for 5-10 minutes for the iPhone to pull down all data from the cloud again (until then, all your contacts, calendars, etc will appear blank).
8. Check that all now works OK.
Note: If you leave out steps 2-4, the duplicates WILL go but the phone won't sync properly afterwards!