si creo que ya vi el error, cambialo asi :
Código vb:
Ver originalFor i As Integer = 0 To undataset.Tables("Productos").Rows.Count - 1
'Si alcanzo el maximo de columnas de la fila a pintar
if contador = bxf Then
'seteo el valor del contador
contador = 0
'doy la coordenada para que inicie otra fila para crear botones
y = y + altoBoton
End if
Dim nuevobotonProd As New Button
nuevobotonProd.BackColor = Color.Khaki
nuevobotonProd.Location = New Point(x, y)
nuevobotonProd.Size = New Size(altoBoton, anchoBoton)
nuevobotonProd.Text = undataset.Tables("Productos").Rows(i).Item(0).ToString()
Me.Controls.Add(nuevobotonProd)
'Aumento contador de columnas
contador = contador + 1
'aumento la coordenada para crear otro boton en la siguiente columna
x = x +anchoBoton
Next
la creacion de la variable boton la pongo adentro, creo que era por eso pruebalo ;)
EDIT : Llego a casa y te sigo ayudando. ahora ando en el trabajo.