Ok, so the solution is as follows:
Both:
For Each tbp As TabPage In frmTimingP2P.tabctrlTimingTable.Controls
For Each ctrl As Control In tbp.Controls
Dim dgv As DataGridView = TryCast(ctrl, DataGridView)
If Not dgv Is Nothing Then
If dgv.Name = strDGVName Then
intSelectedRowCount = dgv.SelectedRows.Count
End If
End If
Next
Next
And:
Dim c As Collections.Generic.IEnumerable(Of DataGridView)
For p = 0 To frmTimingP2P.tabctrlTimingTable.TabCount - 1
c = frmTimingP2P.tabctrlTimingTable.TabPages(p).Controls.OfType(Of DataGridView)()
If c(0).Name = strDGVName Then p = frmTimingP2P.tabctrlTimingTable.TabCount
Next
intSelectedRowCount = c(0).SelectedRows.Count
Work as they should. The problem was that in my runtime generated DataGridView controls, I did not set the SelectionMode Method to FullRowSelect, and I was selecting individual cells, which do not count as "Rows".
Thanks for your help!