I don't do a lot with iMates, so I'm not sure how they react in the assembly when you delete a used iMate and remake it to be named the same.
I would just add a check to see if any iMates are already using the workpoint in question. Then you only make new ones:
Sub Main
Dim oDoc As PartDocument
oDoc = ThisApplication.ActiveDocument
Dim oCompDef As PartComponentDefinition
oCompDef = oDoc.ComponentDefinition
'Define the work point object
Dim oWorkPoint As WorkPoint
'Define the numbers used to create the work point names
Dim i As Integer
Dim Max_Count As Integer
Max_Count = Row_Count * Column_Count
'Set the first value to zero to negate the Origin Point
i = 0
'Define the iMate creation object
Dim oiMate As MateiMateDefinition
Dim AlliMates As iMateDefinitions = oCompDef.iMateDefinitions
'Cycle through each work point in the pattern and rename them
For i = 0 To Max_Count
For Each oWorkPoint In oDoc.ComponentDefinition.WorkPoints
'Create or update iMate
If ExistingImate(AlliMates, oWorkPoint) = False
oiMate = oCompDef.iMateDefinitions.AddMateiMateDefinition(oWorkPoint, 0, , , "MatePoint")
Else
'iMate exists, don't remake
End If
oWorkPoint.Name = "Work Point" & i
i = i + 1
Next
Next
iLogicVb.UpdateWhenDone = True
End Sub
Function ExistingImate(iMates As iMateDefinitions, Source As Object) As Boolean
Dim Result As Boolean = False
For Each imd As iMateDefinition In iMates
'Assumes all iMates are all based on Geometry Which can be named.
If imd.Entity.Name = Source.Name Then Result = True : Exit For
Next
Return Result
End Function
If you have iMates built off of objects which don't have a "Name" Property, you might have to adjust the Custom Function, but if not this should work for you
Let me know if you have any questions, or if it is not working as intended.