It has been years since I've worked with Word automation in C#, but this comes to mind; see if this is relevant:
When you assign Text to an existing BookMark's Range.Text Property, that effectively removes the BookMark object, because the BookMark itself is included in the Range.
What you want to do, then, is first check if the BookMark actually exists before trying to reset it, and, then, "measure" the BookMark, create a new Range based on your measurements, then, re-create it with its new Text value; an example of this technique for VSTO circa 2006 is shown here: [
^].