Even if you could have the TypeOf ... is ... condition you were trying for, the code inside that if block will still fail. Just because you have made a check to ensure that the contents of a variable is a certain type, the compiler will still treat the variable as if it is the base type. You would need to put something like this:
Private Sub GetUserInputValues(Of T)(ByRef alRemoteCustomFieldValue As List(Of T))
....
If TypeOf alRemoteCustomFieldValue Is List(Of RemoteCustomFieldValue) Then
'make a variable of the type just checked for and cast the original to it
Dim customList As List(Of RemoteCustomFieldValue) = _
CType(alRemoteCustomFieldValue, List(Of RemoteCustomFieldValue)
Dim rcfvUsrInput As RemoteCustomFieldValue = New RemoteCustomFieldValue
rcfvUsrInput.customfieldId = ContentCtrl.ID
rcfvUsrInput.values = s.ToArray
'use the cast variable
customList.Add(rcfvUsrInput)
Else
....
The problem stems mainly from the fact that generic classes cannot be converted based on the type parameter (eg: List(of Derived) cannot be converted to List(of Base)). You can however create a specialized version of the function for when T is RemoteCustomFieldValue.
Private Sub GetUserInputValues(alRemoteCustomFieldValue As List(of RemoteCustomFieldValue))
'special code for this type
End Sub
However, if you have a class SpecializedFieldValue that derives from RemoteCustomFieldValue, and you have a List(of SpecializedFieldValue), the more generic version of the function would be called. Also, unless you intend to completely replace the list in the code that calls the function (not just Clear and Add new items), you should probably pass ByVal instead of ByRef.