Öhm, jetzt wirds interessant.
Dein letzter Screenshot ist aus meinem Tool, nicht aus dem von Drexel. 
Ich hatte mich auch gerade ein wenig gewundert, wo der Screen herkommt und schon das Youtube Studio im Verdacht. xD
Ich denke mal, dass sich das mit einem new string(filename.Where(c => Convert.ToInt32(c) < 128).ToArray()) lösen lassen sollte. Zur Erklärung: damit werden alle Zeichen aus dem String entfernt, die nicht im ASCII-Standard enthalten sind und der Rest in einen neuen String gepackt.
ASCII geht angeblich immer. Leider findet man im Internet auch wieder hunderttausend Aussagen dazu, welche Zeichen in einem Header erlaubt sind.. 
Seit ich das Jetbrain komplett Pack habe, kann ich mir ziemlich einfach die Sourcen vom Framework anschauen und mal gecheckt, was bei System.Net.WebHeaderCollection.CheckBadChars(String name, Boolean isHeaderValue) passiert...
Die Hauptbedingung für valide Chars ist
char ch = (char)((uint)byte.MaxValue & (uint)name[index]);
if (ch >= ' ' || ch == '\t')
Daneben gibt es noch ein paar valide Sachen,wie Zeilenumbrüche und Tabs, das sollte aber für Dateinamen irrelevant sein.
Deinen Ansatz find ich gut, ich würde nur in Anlehnung an den Frameworkcode
new string(fileName.Where(c =>
char ch = (char) ((uint) byte.MaxValue & (uint)c);
if (ch >= ' ' || ch == '\t')
draus machen. Er lässt also alle Extended ASCII Zeichen von 32 bis 255 zu.
Foxhunter Das normale Pipe Zeichen ist zumindest auf meinem Rechner in Dateinamen nicht erlaubt, deswegen vermute ich Zwiebelpeter hat das irgendein anderes Zeichen reingefummelt. =) Da Du Dir ja schon so geholfen hast, fixe ich das einfach mit der nächsten Version, das sollte ja nicht so oft auftreten.
Im Titel kannst Du ja das normale Pipe Zeichen verwenden.