It's not that the data is being entered in reverse, it's that when you set the Text property, the insertion point is moved to the beginning of the control each time. Try this:
int cursor = textBox1.SelectionStart;
textBox1.Text = textBox1.Text.ToUpper();
textBox1.SelectionStart = cursor;
But I would probably have used TextChanged event instead, as it will avoid the odd visual effect you will get, and make sure that pasted data is also in upper case.
If you do use TextChanged, set a flag, because setting the Text property will cause a TextChanged event, which will set the Text property, which...