拡張子を置換するChangeExtensionメソッドが用意されている一方で、(少なくとも.NET 5時点までの)Pathクラスには拡張子を除くファイル名部分だけを置き換えるメソッド・ChangeFileNameのようなメソッドは用意されていません。 そのため、GetDirectoryNameメソッドGetExtensionメソッドなどを組み合わせて独自に実装する必要があります。

以下はパスのうち、拡張子を除くファイル名部分を置き換えるメソッドを実装した例です。

Pathクラスのメソッドを組み合わせてパスのファイル名部分だけを置換する
using System;
using System.IO;

class Sample {
  // パスの拡張子を除いたファイル名部分だけを置き換えるメソッド
  static string ChangeFileName(string path, string newFileName)
  {
    var dir = Path.GetDirectoryName(path); // ディレクトリ部分を抽出
    var ext = Path.GetExtension(path); // 拡張子部分を抽出

    // ディレクトリ、新しいファイル名、拡張子を連結して返す
    return Path.Combine(dir, newFileName + ext);
  }

  static void Main()
  {
    foreach (var path in new[] {
      @"E:\dir\subdir\file.txt",  // 絶対パス (Windows形式)
      @"/dir/subdir/file.txt",    // 絶対パス (UNIX形式)
      @".\dir\subdir\file.txt",   // 相対パス (Windows形式)
      @"./dir/subdir/file.txt",   // 相対パス (UNIX形式)
      @"file.txt",                // ファイル名のみのパス
      @"file",                    // 拡張子のないファイル名
      @"file.txt.bak",            // ピリオドを二つ以上含むファイル名
      @"file.",                   // ピリオドで終わるファイル名
    }) {
      Console.WriteLine("path = {0}", path);
      Console.WriteLine("    => {0}", ChangeFileName(path, "text")); // 拡張子を維持してパスのファイル名をtextに変える
      Console.WriteLine();
    }
  }
}
実行結果
path = E:\dir\subdir\file.txt
    => E:\dir\subdir\text.txt

path = /dir/subdir/file.txt
    => \dir\subdir\text.txt

path = .\dir\subdir\file.txt
    => .\dir\subdir\text.txt

path = ./dir/subdir/file.txt
    => .\dir\subdir\text.txt

path = file.txt
    => text.txt

path = file
    => text

path = file.txt.bak
    => text.bak

path = file.
    => text

実行結果
path = E:\dir\subdir\file.txt
    => text.txt

path = /dir/subdir/file.txt
    => /dir/subdir/text.txt

path = .\dir\subdir\file.txt
    => text.txt

path = ./dir/subdir/file.txt
    => ./dir/subdir/text.txt

path = file.txt
    => text.txt

path = file
    => text

path = file.txt.bak
    => text.bak

path = file.
    => text

この例で使用しているPath.Combineメソッドについては§.パスの結合 (Combine)を参照してください。