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

CurrentCultureとOrdinalの違い
Imports System

Class Sample
  Shared Sub Main()
    Console.WriteLine("Compare CurrentCulture : {0}", String.Compare("亜", "井", StringComparison.CurrentCulture))
    Console.WriteLine("Compare Ordnal         : {0}", String.Compare("亜", "井", StringComparison.Ordinal))
  End Sub
End Class
実行結果
Compare CurrentCulture : -1
Compare Ordnal         : 7

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

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

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

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の場合もこれと同様の動作となります。