Excel knows how many columns and rows that the sheet has, but as r is a variable range it will need to determine that. But Excel does do a lot of things under the hood, such as usedrange, so it will be very fast to determine those two numbers.
So my advice, go with r.Rows.Count and r.Columns.Count and relax, it will not hurt you.
I tend to do the outsorting tests first, like so
Sub test(r As Range, ws As Worksheet)
If r.Rows.Count = 1 And r.Columns.Count = 1 Then
If Not Intersect(ws.Columns(2), r) Is Nothing Then
If Not IsEmpty(r) Then
(...)
End If
End If
End If
End Sub
Although this might be a bit more efficient (I mean a bit)
Sub test(r As Range, ws As Worksheet)
Dim l As Long
If Not Intersect(r, ws.Rows(2)) Is Nothing Then
If r.Rows.Count = 1 Then
If r.Columns.Count = 1 Then
If Not IsEmpty(r) Then
Debug.Print r.Address
End If
End If
End If
End If
End Sub