<MenuItem Header="{Binding Value, StringFormat={}{0}円}"/>
みたいに書いてもStringFormatの部分が無視されてしまう。ググって見ると WPF binding with StringFormat doesn't work on ToolTips - Stack Overflow がヒットして、もしやと見てみたらMenuItemにもHeaderStringFormatプロパティがあってこちらを使うと良いらしい(検索する前にドキュメントを見ろという話)。
<MenuItem Header="{Binding Value}" HeaderStringFormat="{}{0}円"/>
MenuItem(実際はHeaderedItemsControl).Headerはobject型なので、Binding.StringFormatは機能しないんですね。TextBlock.Textなどはstring型なので動作するみたい。…ってこと自体すでにドキュメントに書かれているし。
Gets or sets a string that specifies how to format the binding if it displays the bound value as a string.
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.data.bindingbase.stringformat?view=netframework-4.7.2
内部的にはItemsControlがHeaderとHeaderStringFormatをDisplayMemberTemplateSelectorに渡してこれがTextBlockを子に入れ込んでいる感じなんですかね。