Okay. I've solved my own problem in an ugly way.
myRtb.BeginChange();
myRtb.CaretPosition = myRtb.Document.ContentStart;
for (int n=0; n<nOffset; n++)
{
TextPointer moveTo = myRtb.CaretPosition.GetNextInsertionPosition(LogicalDirection.Forward);
if (moveTo == null)
break;
myRtb.CaretPosition = moveTo;
}
myRtb.EndChange();
But there's got to be a better way. Hey MSFT how about a MoveToInsertionPosition(int nOffset) ?