The colSpec1 variable has been defined twice, but I think that's a typo.
Assuming you mean:
Spec rowSpec1 = GridLayout.InvokeSpec(0, 5, GridLayout.Center);
Spec colSpec1 = GridLayout.InvokeSpec(0);
Spec colSpec2 = GridLayout.InvokeSpec(0);
The rowSpec1 variable starts at row 0 and span 5 rows. Both of the column specs start at column 0 and span 1 column. When the buttons are placed, the rows and columns match exactly so the buttons get stacked.
Think of a GridLayout spec as one dimension of a GridLayout cell. You need to have both dimensions of the cell to display a view within it. When placing items in a GridLayout, you have to be careful that cells don't overlap unless you want them to.
With that in mind, you may have better luck with:
Spec rowSpec1 = GridLayout.InvokeSpec(0, GridLayout.Center);
Spec rowSpec2 = GridLayout.InvokeSpec(1, GridLayout.Center);
Spec colSpec1 = GridLayout.InvokeSpec(0);
Spec colSpec2 = GridLayout.InvokeSpec(0);
Since it doesn't seem like you need to span rows, you can define the rowSpec variables with a size of 1.
Then you should be able to add the views,
this.AddView(bt1, new GridLayout.LayoutParams(rowSpec1, colSpec1));
this.AddView(bt2, new GridLayout.LayoutParams(rowSpec2, colSpec2));