Lo que ocurre es que estás controlando el evento inadecuado, en el evento RichTextBox.KeyDown NO se desplaza el caret, por ende, estás intentando obtener una información (índice de columna/linea) que todavía no ha sido asignada a la nueva posición del caret.
Aparte de eso, no es buena idea que llames al método Form.Update() o RichTextBox.Update() en cada pulsación, es innecesario y muy expensivo, además, en cualquier caso el método que deberías llamar debería ser StatusStrip.Update().
¿La solución?, controlar el evento RichTextBox.KeyUp:
VB.NET:
C#:
Saludos
			Aparte de eso, no es buena idea que llames al método Form.Update() o RichTextBox.Update() en cada pulsación, es innecesario y muy expensivo, además, en cualquier caso el método que deberías llamar debería ser StatusStrip.Update().
¿La solución?, controlar el evento RichTextBox.KeyUp:
VB.NET:
Código (vbnet) [Seleccionar] 
    Private Sub RtbEditor_KeyUp(sender As Object, e As KeyEventArgs) _
    Handles RtbEditor.KeyUp
        Me.UpdateStatusBarInfo(DirectCast(sender, RichTextBox))
    End Sub
    Private Sub UpdateStatusBarInfo(ByVal rtb As RichTextBox)
        Dim lineIndex As Integer = rtb.GetLineFromCharIndex(rtb.SelectionStart)
        Dim colIndex As Integer = (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(lineIndex))
        TsLblLine.Text = Convert.ToString(lineIndex)
        TsLblCol.Text = Convert.ToString(colIndex)
    End SubC#:
Código (csharp) [Seleccionar] 
private void RtbEditor_KeyUp(object sender, KeyEventArgs e)
{
	this.UpdateStatusBarInfo((RichTextBox)sender);
}
private void UpdateStatusBarInfo(RichTextBox rtb)
{
	int lineIndex = rtb.GetLineFromCharIndex(rtb.SelectionStart);
	int colIndex = (rtb.SelectionStart - rtb.GetFirstCharIndexFromLine(lineIndex));
	TsLblLine.Text = Convert.ToString(lineIndex);
	TsLblCol.Text = Convert.ToString(colIndex);
}
//=======================================================
//Service provided by Telerik (www.telerik.com)
//=======================================================Saludos

.