The LocationResourceManager code you provided isn't the issue: the difference in behavior is based on how you call that code. It will work the same from C# as in Xaml if you call it in the same way. It's a bit easier in Xaml because Xaml has direct support for data binding, while C# requires you wire up the Binding explicitly.
The XAML version works because it binds to the data, and the data binding updates when the underlying data updates:
<Label Text="{helper:Translate Label_Text}" />.
The C# code loads the Label.Text directly without binding the data. Since it's not bound to underlying data it doesn't listen for changes to the underlying data.
new Label(Text=translate.Text=LocalizationResourceManager.Instance["Label_Text"]}.
You can set up data binding from code by creating a Binding object as you do in your MarkupExtension and then assigning that to your Label. See https://learn.microsoft.com/en-us/dotnet/api/xamarin.forms.binding.-ctor?view=xamarin-forms for documentation and example code.
label.SetBinding (Label.TextProperty, new Binding ( ... );
--Rob