А ну в целом понятно.
tp у тебя это просто переменная. В начале цикла ты присваиваешь ей i.TextPosition, потом если условие IF выполняется, присваиваешь ей всё то значение что после =. В этот момент i.TextPosition внутри переменной, просто перезаписывается на новое значение.
То есть ты перезаписывал значение переменной, а не самого i.TextPosition. Так что всё встало на свои места) Сам и разобрался же.