CurrentCultureInvariantCultureは特定のカルチャでの規則に基づいて比較を行いますが、一方Ordinalではカルチャに依存せず、文字列の各文字を数値(Unicode序数、Unicode ordinal)、つまりコードポイントで比較します。

CurrentCultureの場合は(あ)の方が(い)より小さい(前に並ぶ)、つまり"<"とされます。

対してOrdnalの場合は、(U+4E95)の方が(U+4E9C)よりも小さい(前に並ぶ)、つまり">"とされるため、上記のような結果となります。 (0x4E9C - 0x4E95 = 0x0007 = 7である点に注目するとわかりやすいかもしれません)

また、次のような例をとって違いを見てみます。

CurrentCultureとOrdinalの違い・記号の扱い
Imports System

Class Sample
  Shared Sub Main()
    Dim p1 As String() = New String() {"coop", "co-op"}
    Dim p2 As String() = New String() {"cant", "can't"}

    Console.WriteLine("Compare CurrentCulture ({0}, {1}) : {2}", p1(0), p1(1), String.Compare(p1(0), p1(1), StringComparison.CurrentCulture))
    Console.WriteLine("Compare Ordinal        ({0}, {1}) : {2}", p1(0), p1(1), String.Compare(p1(0), p1(1), StringComparison.Ordinal))

    Console.WriteLine("Compare CurrentCulture ({0}, {1}) : {2}", p2(0), p2(1), String.Compare(p2(0), p2(1), StringComparison.CurrentCulture))
    Console.WriteLine("Compare Ordinal        ({0}, {1}) : {2}", p2(0), p2(1), String.Compare(p2(0), p2(1), StringComparison.Ordinal))
  End Sub
End Class
実行結果
Compare CurrentCulture (coop, co-op) : -1
Compare Ordinal        (coop, co-op) : 66
Compare CurrentCulture (cant, can't) : -1
Compare Ordinal        (cant, can't) : 77

CurrentCultureの場合は辞書的な並びでの比較となり、"coop"は"co-op"よりも前、"cant"は"can't"よりも前、つまり"coop<co-op"、"cant<can't"という結果になります。

対してOrdinalの場合は、"coop"と"co-op"の3文字目を比較するとo(U+006F)と-(U+002D)であるため"coop>co-op"という結果になります。 同様に、"cant"と"can't"の3文字目はt(U+0074)と'(U+0027)であるため"cant>can't"という結果になります。 (この結果も、0x006F - 0x002D = 0x0042 = 66、0x0074-0x0027 = 0x004D = 77である点に注目するとよりわかりやすいかもしれません)

CurrentCultureIgnoreCaseOrdinalIgnoreCaseの場合もこれと同様の動作となります。