Ok... nothing like asking the question to see what was wrong with my code!
It turns out I was updating the properties like this:
bDelete = Me.pSurvey.deleteSurveyPoints()
If bDelete Then
Me.pSurvey.TotalPoints = 0
Me.pSurvey.TotalAdjustedPoints = 0
But the problem was that inside Survey.deleteSurveyPoints I had a line:
Me.lTotalPoints = 0
Hence value <> lTotalPoints (property set) would never be verified and the PropertyChanged event would never be raised!