This is ok in C#:
private int total;
public int Total {
get {
return total;
}
}
So the backing field total is spelled the same as the Property Total with the only thing telling them apart being the case of the T.
With VB.NET VS complains if I try to do the following. In fact it won’t even let me write Return total with a lower case t and auto-corrects to an upper case T

But if I spell the backing field differently then it seems to be ok:
Private fTotal As Integer
Public ReadOnly Property Total() As Integer
Get
Return fTotal
End Get
End Property
I realize they are different languages but is there a logical reason behind this difference? (EDIT originally said “apparent inconsistency” rather than “difference”)
Also – I assume even though Visual Studio auto-corrects the case of my VB.NET but in reality this language is not case-sensitive?
The original reason is simply historical: VB is based on BASIC which, like other languages at the time (FORTRAN) was case insensitive (but was usually written in all-uppercase).
Furthermore, I don’t see any inconsistency: inside VB, the casing is entirely consistent. In particular, it’s not “sort of case-sensitive” as your title asks.
There is a logical reason to be case insensitive, even today: it makes it harder to introduce bugs due to name clashes; consider the following C# code:
Did you spot the error immediately? If so, not bad (the syntax highlight here helps). In VB, this class of errors cannot happen. But in practice I think this class of bugs isn’t all that problematic because once identified they are easily eliminated. So while this is a reason for case insensitivity, it’s not a very strong one.
Finally, notice that Windows and OS X file systems use the same convention as VB here: the file system is case insensitive (filename case doesn’t matter) but case aware – meaning the file system preserves the original casing of a filename and displays it correctly but when comparing, it doesn’t consider case.