難しいことは良くわからんが、こんなコードでいいんじゃないか?

private void textBox1_TextChanged(object sender, EventArgs e) {
  if (string.IsNullOrEmpty(textBox1.Text)) {
    textBox1.Height = textBox1.PreferredHeight;
  } else {
    int margin = textBox1.PreferredHeight - textBox1.Font.Height;
    int height = textBox1.Font.Height * textBox1.Lines.Length;
    textBox1.Height = height + margin;
  }
}