WideCharToMultiByte msvc 2012 bug?
::WideCharToMultiByte(codePage, 0, wstr, -1, str, length, NULL, NULL);
Небольшая поправка: размер целевого буфера должен быть не length, а length+1 (ведь именно столько памяти выделено), тогда не придётся вставлять завершающий ноль вручную, функция сделает это сама.

Что касается проблемы, я не понял, при чём тут UTF-8. Конвертируется-то не в UTF-8 (CP_UTF8), а в ANSI (CP_ACP). И в отладчике Студии отображается ANSI. Только в 2012 этот ANSI из другой кодовой страницы. То есть, судя по всему, имеет место баг отладчика Студии. Если раскрыть строку и рассмотреть её посимвольно, то будет видно, что коды символов в обоих случаях одинаковые. Просто 2010 для отображения этих кодов в виде строки использует одну кодовую страницу (русскую, 1251), а 2012 — другую (1252, западную).
А попробуйте явно указать кодировку вместо CP_ACP.

Часто для перекодировки используется прием: string str = _bstr_t(wstr).operator char*();

.operator char*() в реализации использует WideCharToMultiByte. Если этот прием также сработает неправильно, скорее всего баг у Майкрософт.