For anyone that has had this problem, hopefully this helps. I have written code in a previous project to repair this but then on my current project, found an Out of the Box Solution (No Code)
So here is the scenario. You have a feature that activates a list instance. In this List Instance, you are defining some data rows that you want to be populated into the list when it is provisioned. Typically, this would look something like this:
<ListInstance
FeatureId="{AD72BD0A-B2B6-4932-B4EC-D101B20E2E04}"
TemplateType="10001"
Title="$Resources:customerwcm,NavLinksList_Title;"
Url="Lists/NavLinksList"
Description="$Resources:customerwcm,NavLinksList_Description;">
<Data>
<Rows>
<Row>
<Field Name="Key">HomeLink</Field>
<Field Name="Title">$Resources:customerwcm,NavLinksList_Home;</Field>
<Field Name="Location">topnav</Field>
<Field Name="DisplayOrder">0</Field>
<Field Name="URL">/</Field>
</Row>
<Row>
<Field Name="Key">ContactUsLink</Field>
<Field Name="Title">$Resources:customerwcm,NavLinksList_ContactUs;</Field>
<Field Name="Location">subtopnav</Field>
<Field Name="DisplayOrder">2</Field>
<Field Name="URL">/$Resources:cmscore,List_Pages_UrlName;/contactus.aspx</Field>
</Row>
</Rows>
</Data>
</ListInstance>
When this feature is activated, the List instance is created and the two list items are added. So what's the problem ? If you activate the feature again (through feature de-activate and then re-activate) OR through Content Deployment (Features are activated again on the target farm) then your list items will be duplicated. You will end up with TWO of each of these items. De-activate and re-activate again and you will have 3 items of each. This is not only annoying but can cause problems in lists that you use for configuration settings, etc.
Previously, I wrote a serious amount of code to work around this issue (which I will not go into detail here) but recently discovered a very simple fix. Add an ID to each of the list items and define the ID for each item. so the previous List Instance element XML would look like this:
<ListInstance
FeatureId="{AD72BD0A-B2B6-4932-B4EC-D101B20E2E04}"
TemplateType="10001"
Title="$Resources:customerwcm,NavLinksList_Title;"
Url="Lists/NavLinksList"
Description="$Resources:customerwcm,NavLinksList_Description;">
<Data>
<Rows>
<Row>
<Field Name="ID">1</Field>
<Field Name="Key">HomeLink</Field>
<Field Name="Title">$Resources:customerwcm,NavLinksList_Home;</Field>
<Field Name="Location">topnav</Field>
<Field Name="DisplayOrder">0</Field>
<Field Name="URL">/</Field>
</Row>
<Row>
<Field Name="ID">2</Field>
<Field Name="Key">ContactUsLink</Field>
<Field Name="Title">$Resources:customerwcm,NavLinksList_ContactUs;</Field>
<Field Name="Location">subtopnav</Field>
<Field Name="DisplayOrder">2</Field>
<Field Name="URL">/$Resources:cmscore,List_Pages_UrlName;/contactus.aspx</Field>
</Row>
</Rows>
</Data>
</ListInstance>
Notice the Extra : <Field Name="ID">2</Field> node.
Apparently, when SharePoint goes to add the items, if there is one already there with that particular list ID, it skips it. I have tested this to ensure that it is not simply overwriting the existing one and it works as desired.
I hope this simple tip is as useful to all of you as I found it to be !!
Happy SharePointing !!