Well, my initial experiment proved to me that YES, it's much faster to use WideCharToMultiByte().
The speedup varies by language of text I'm converting of course.
The time to run my tests were reduced by: English: 13%, German: 18%, Japanese: 16%, Chinese: 12%
The gist of my code is now:
String^ str = "...the string to convert...";
pin_ptr<const wchar_t> unicode16 = PtrToStringChars(str);
int const cbNeeded = WideCharToMultiByte(CP_UTF8, 0, unicode16, -1, nullptr, 0, nullptr, nullptr);
auto converted = make_unique<MyBuffer>(cbNeeded);
int const cbConverted = WideCharToMultiByte(CP_UTF8, 0, unicode16, -1, converted.get(), cbNeeded, nullptr, nullptr);
It was a surprise that passing -1 for the length parameter to WCtoMB resulted in an even faster conversion!
I hope this helps someone out there and I'm still interested in any responses from any devs doing similar work.