Not sure what your are asking or telling, as I do not know the difference between a block or blockreference.
The only thing I can see is that you are not clearing previous xdata on write. Note: if it is one time write, no big deal, but perhaps you are not really adding the data to blocks at all. as in, its already there???
Try clearing to data before the write. Make sure you test the object. the data that you are seeing may be needed for use later by acad and cause a corruption issue???
Public Function setXdataInformation(ByVal itm As AcadObject, sAppName As String, sValue As String) As Boolean
Dim DataType(0 To 1) As Integer
Dim Data(0 To 1) As Variant
Dim clearDataType(0) As Integer
Dim clearData(0) As Variant
If itm Is Nothing Then
'MsgBox "not found"
Exit Function
End If
' -- create new xdata item
clearDataType(0) = 1001: clearData(0) = sAppName
itm.SetXData clearDataType, clearData
' -- save data
DataType(0) = 1001: Data(0) = sAppName
DataType(1) = 1000: Data(1) = sValue
itm.SetXData DataType, Data
' -- cleanup
Set itm = Nothing
End Function