We have to define a function to "lift" the value into our custom class. (I'm using an extension method to achieve this.)

Public Module Exts
<Runtime.CompilerServices.Extension>
Public Function __(Of T As IComparable(Of T))( value As T) As CMPOP_A(Of T)
Return New CMPOP_A(Of T)(value )
End Function
End Module

Define our custom class. (This will do the first part of the "range check")

Public Class CMPOP_A(Of T As IComparable(Of T))
Private _Value As T
Sub New( value As T )
_Value = value
End Sub
' First part of Range Check is done here. Also note we have to remember what the middle value is over to the next part.
Shared Public Operator < (x As CMPOP_A(of T), y As t) As CMPOP_B(Of T) ' <-- Not a Boolean
Return New CMPOP_B(Of T)( y, x._Value.CompareTo(y) < 0)
End Operator
Shared Public Operator <= (x As CMPOP_A(of T), y As t) As CMPOP_B(Of T) ' <-- Not a Boolean
Return New CMPOP_B(Of T)( y, x._Value.CompareTo(y) <= 0)
End Operator
' The only way I can find to satisfy the compiler.
<Obsolete("Not Supported",True )>
Shared Public Operator >= (x As CMPOP_A(OF T),y As T) As CMPOP_B(OF T) ' <-- Not a Boolean
Throw New NotImplementedException( )
End Operator
' The only way I can find to satisfy the compiler.
<Obsolete("Not Supported",True )>
Shared Public Operator > (x As CMPOP_A(OF T),y As T) As CMPOP_B(OF T) ' <-- Not a Boolean
Throw New NotImplementedException( )
End Operator
End Class

Note: The return type of the operators isn't Boolean.

Second part of the Range Check

Public Class CMPOP_B(Of T As IComparable(Of T))
Private _Value As T
Private _State As Boolean
Sub New( Value As T, state As Boolean )
_Value = Value
_State = state
End Sub
' If the State is False already it skips the comparison and returns False.
Shared Public Operator <(x As CMPOP_B(Of T), y As T) As Boolean
Return x._State AndAlso (x._Value.CompareTo(y)<0)
End Operator
Shared Public Operator <=(x As CMPOP_B(Of T), y As T) As Boolean
Return x._State AndAlso (x._Value.CompareTo(y)<=0)
End Operator
' The only way I can find to satisfy the compiler.
<Obsolete("Not Supported",True )>
Shared Public Operator >= (x As CMPOP_B(OF T),y As T) As Boolean
Throw New NotImplementedException( )
End Operator
' The only way I can find to satisfy the compiler.
<Obsolete("Not Supported",True )>
Shared Public Operator > (x As CMPOP_B(OF T),y As T) As Boolean
Throw New NotImplementedException( )
End Operator
End Class

The operators in this class do return boolean, because this is the end of the "range checking operators" thus require a true/false answer. Is the value within the range?