When comparing types in VB the following works as expected and enables the current instance to be compared against a specific inherited class, in this case returning False (snippet from LINQPad)

Sub Main
	Dim a As New MyOtherChildClass

	a.IsType().Dump()
End Sub

' Define other methods and classes here
MustInherit class MyBaseClass
	Public Function IsType() As Boolean
		Return TypeOf Me Is MyChildClass
	End Function
End Class

Class MyChildClass 
	Inherits MyBaseClass
End Class

Class MyOtherChildClass
	Inherits MyBaseClass
End Class

However when generics are introduced the VB compiler fails with the error Expression of type 'UserQuery.MyBaseClass(Of T)' can never be of type 'UserQuery.MyChildClass'.

' Define other methods and classes here
MustInherit class MyBaseClass(Of T)
	Public Function IsType() As Boolean
		Return TypeOf Me Is MyChildClass
	End Function
End Class

Class MyChildClass 
	Inherits MyBaseClass(Of String)
End Class

Class MyOtherChildClass
	Inherits MyBaseClass(Of String)
End Class

The equivalent code in C# compiles and allows the comparison, returning the correct result

<!-- language: lang-cs -->
void Main()
{
	var a = new MyOtherChildClass();

	a.IsType().Dump();
}

// Define other methods and classes here

abstract class MyBaseClass<T>
{
	public bool IsType()
	{
		return this is MyChildClass;
	}
}

class MyChildClass : MyBaseClass<string>
{
}

class MyOtherChildClass : MyBaseClass<string>
{
}

Why does the VB compiler not allow this comparison?

You raise an interesting point about VB/C# compilation that I can't really speak to. If you're looking for a solution, here's a way to do it from the question How can I recognize a generic class?

Define these functions:

<!-- language-all: lang-vb -->
Public Function IsSubclassOf(ByVal childType As Type, ByVal parentType As Type) As Boolean
    Dim isParentGeneric As Boolean = parentType.IsGenericType

    Return IsSubclassOf(childType, parentType, isParentGeneric)
End Function

Private Function IsSubclassOf(ByVal childType As Type, ByVal parentType As Type, ByVal isParentGeneric As Boolean) As Boolean
    If childType Is Nothing Then
        Return False
    End If

    If isParentGeneric AndAlso childType.IsGenericType Then
        childType = childType.GetGenericTypeDefinition()
    End If

    If childType Is parentType Then
        Return True
    End If

    Return IsSubclassOf(childType.BaseType, parentType, isParentGeneric)
End Function

Call like this:

Dim baseType As Type = GetType(MyBaseClass(Of ))
Dim childType As Type = GetType(MyOtherChildClass)

Console.WriteLine(IsSubclassOf(childType, baseType))
'Writes: True

Here's a Microsoft Connect Ticket that might deal with this issue and give some explanation as to whether this was a feature or a bug of generic typing.

Although this case doesn't seem supported by the Type Of documentation which states that for classes, typeof will return true if:

objectexpression is of type typename or inherits from typename