Код:
	procedure TForm1.Button1Click(Sender: TObject);
var i, j: Integer;
begin
  i:= 0;
  while i <= StringGrid1.RowCount - 1 do
  begin
    if Trim(StringGrid1.Rows[i].Text) = '' then
    begin
      for j:= i to StringGrid1.RowCount - 1 do
        StringGrid1.Rows[j]:= StringGrid1.Rows[j+1];
      StringGrid1.RowCount:= StringGrid1.RowCount - 1;
    end
    else
      Inc(i);
  end;
end; 
 
Точно, когда переходил от for к while, забыл, что границы включаются (или i<RowCount)