::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, западную).