Use x.After instead of textBuffer.CurrentSnapshot for this event handler.  It is very possible for textBuffer.CurrentSnapshot to be several edits ahead of the change event you are currently inspecting.  This happens when code performs an edit inside of change events and in certain projection buffer cases.  Using x.After ensures the positions you calculated in the SelectMany call will be valid