DateTimeとDateTimeOffsetは日付・時間の古い順に並べ替えられます。

並べ替えに際して、DateTimeではKindプロパティの値は無視されて日時のみが比較されます。 したがって、2000-01-01T00:00:00+00:00(UTC)と2000-01-01T00:00:00+09:00(ローカル時刻)と2000-01-01T00:00:00(タイムゾーン指定なし)はいずれも同一の値として扱われます。 DateTimeの並べ替えでは、自動的にUTCに変換されてから並べ替えられるといったことはありません。 そのため、ToLocalTime・ToUniversalTimeメソッドを使って現地時刻・UTCのいずれかに統一してからソートしないと意図しない結果になる場合があります。

一方DateTimeOffsetでは、日時に加えてOffsetプロパティの値が考慮されて比較されます。 したがって、2000-01-01T00:00:00+09:002000-01-01T00:00:00+00:002000-01-01T00:00:00-05:00はいずれも異なる値として比較されます。

日付型の値のソート順序
using System;

class Sample {
  static void Main()
  {
    DateTime[] dateTimeArray = new DateTime[] {
      new DateTime(2000, 1, 1,  0, 0, 0, DateTimeKind.Local),
      new DateTime(2000, 1, 1,  0, 0, 0, DateTimeKind.Utc),
      new DateTime(2000, 1, 1,  6, 0, 0, DateTimeKind.Utc),
      new DateTime(2000, 1, 1, 18, 0, 0, DateTimeKind.Utc),
      new DateTime(2000, 1, 2,  0, 0, 0, DateTimeKind.Local),
      new DateTime(2000, 1, 2,  0, 0, 0, DateTimeKind.Utc),
    };
    DateTimeOffset[] dateTimeOffsetArray = new DateTimeOffset[] {
      new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan( 0, 0, 0)),
      new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(-5, 0, 0)),
      new DateTimeOffset(2000, 1, 1, 0, 0, 0, new TimeSpan(+9, 0, 0)),
      new DateTimeOffset(2000, 1, 2, 0, 0, 0, new TimeSpan( 0, 0, 0)),
      new DateTimeOffset(2000, 1, 2, 0, 0, 0, new TimeSpan(-5, 0, 0)),
      new DateTimeOffset(2000, 1, 2, 0, 0, 0, new TimeSpan(+9, 0, 0)),
    };

    Array.Sort(dateTimeArray);
    Array.Sort(dateTimeOffsetArray);

    Console.WriteLine("DateTime");
    foreach (DateTime val in dateTimeArray) {
      Console.WriteLine("{0,-35:o} ({1:o})", val, val.ToUniversalTime());
    }

    Console.WriteLine("DateTimeOffset");
    foreach (DateTimeOffset val in dateTimeOffsetArray) {
      Console.WriteLine("{0,-35:o} ({1:o})", val, val.ToUniversalTime());
    }
  }
}
実行結果
DateTime
2000-01-01T00:00:00.0000000Z        (2000-01-01T00:00:00.0000000Z)
2000-01-01T00:00:00.0000000+09:00   (1999-12-31T15:00:00.0000000Z)
2000-01-01T06:00:00.0000000Z        (2000-01-01T06:00:00.0000000Z)
2000-01-01T18:00:00.0000000Z        (2000-01-01T18:00:00.0000000Z)
2000-01-02T00:00:00.0000000Z        (2000-01-02T00:00:00.0000000Z)
2000-01-02T00:00:00.0000000+09:00   (2000-01-01T15:00:00.0000000Z)
DateTimeOffset
2000-01-01T00:00:00.0000000+09:00   (1999-12-31T15:00:00.0000000+00:00)
2000-01-01T00:00:00.0000000+00:00   (2000-01-01T00:00:00.0000000+00:00)
2000-01-01T00:00:00.0000000-05:00   (2000-01-01T05:00:00.0000000+00:00)
2000-01-02T00:00:00.0000000+09:00   (2000-01-01T15:00:00.0000000+00:00)
2000-01-02T00:00:00.0000000+00:00   (2000-01-02T00:00:00.0000000+00:00)
2000-01-02T00:00:00.0000000-05:00   (2000-01-02T05:00:00.0000000+00:00)