Array.Copyメソッドでは、複写する長さだけでなく、複写元と複写先の始点となるインデックスを指定して複写することも出来ます。 Arrayクラスには部分配列を抜き出すArray.Sliceのようなメソッドは用意されていませんが、次の例のように配列の生成と部分配列の複写を行うことで、Array.Slice相当の処理を行うことが出来ます。

Array.Copyメソッドで部分配列の複写を行い抽出する
using System;

class Sample {
  static void Main()
  {
    // 複写元の配列
    int[] arr1 = {0, 1, 2, 3, 4};

    // 初期化されていない配列を確保
    var arr2 = new int[3];

    // arr1の部分配列(インデックス2から3個分)をarr2のインデックス0以降に複写
    Array.Copy(arr1, 2, arr2, 0, 3);

    foreach (var elem in arr2) {
      Console.Write("{0}, ", elem);
    }
    Console.WriteLine();
  }
}
実行結果
2, 3, 4, 

この方法では部分配列を取得するために新たな配列インスタンスの作成と複写を行うことになりますが、ArraySegmentを使えばインスタンス生成や複写を行わずに部分配列のビューを取得・作成することもできます。

C# 8.0以降、.NET Core 3.0以降では、インデックス/範囲構文n..mを使うことで部分配列の抽出を行うことができるようになっています。

インデックス範囲構文を使って部分配列を抽出する  .NET Standard 2.1/.NET Core 3.0
using System;

class Sample {
  static void Main()
  {
    // 複写元の配列
    int[] arr1 = {0, 1, 2, 3, 4};

    // arr1の部分配列(インデックス2から5より前まで、2以上5未満の3個分)をarr2として抽出
    var arr2 = arr1[2..5];

    foreach (var elem in arr2) {
      Console.Write("{0}, ", elem);
    }
    Console.WriteLine();
  }
}
実行結果
2, 3, 4,