Hi,
Be assured that if all your sounds are in 8k and you call in Asterisk with Opus 48k asterisk has to do the transcoding.
The difference that fs vs * is doing is that it is not playing file for every channel that is requesting it, but moh files are streamed constantly as local://stream so it will just append that stream to channel that is requesting it.
So if you place hold_music on channel by codec they are using, so for example on calls from Opus/48k to use music/48000/ then there shouldn't be any transcoding.
So my opinion Asterisk approach is good if you have a lot of different MOH files and not so many calls asking for them (but you can mimic same behavior with playback also) and FS way of sreeaming and appending to stream is better for more users requesting it, in case you don't have thousands of moh files :)
Hope it helps and if i'm wrong in something maybe someone with more knowledge will correct me.
Regards,
Mirko