Да, это неизбежное следствие способа расчета макета. Чтобы избавиться от горизонтальной полосы прокрутки, потребуется несколько проходов в расчете, но .NET делает только один проход. По уважительной причине макет может быть бистабильным, бесконечно переключаться между двумя состояниями.
Я не очень понимаю, как TableLayoutPanel может быть полезен здесь или как он растет. В общем, просто не закрепляйте это, дайте ему размер, который вы хотите заполнить панель. Возможно, что-то вроде этого:
bool resizingTlp;
private void tableLayoutPanel1_Resize(object sender, EventArgs e) {
if (resizingTlp) return;
resizingTlp = true;
if (tableLayoutPanel1.Height <= panel1.ClientSize.Height) tableLayoutPanel1.Width panel1.ClientSize.Width;
else tableLayoutPanel1.Width = panel1.ClientSize.Width - SystemInformation.VerticalScrollBarWidth;
resizingTlp = false;
}