"Best" can depend on many things, but here are few more short alternatives ordered from fast to slow:
string s = "z?a"l?g¨o?", pattern = @"(?s).(?<=(?:.(?=.*$(?<=((\P{M}\p{C}?\p{M}*)\1?))))*)";
string s1 = string.Concat(s.Reverse()); // "???o¨g?l"a?z"
string s2 = Microsoft.VisualBasic.Strings.StrReverse(s); // "o?g¨l?a"?z"
string s3 = string.Concat(StringInfo.ParseCombiningCharacters(s).Reverse()
.Select(i => StringInfo.GetNextTextElement(s, i))); // "o?g¨l?a"z?"
string s4 = Regex.Replace(s, pattern, "$2").Remove(s.Length); // "o?g¨l?a"z?"