IMHO — глюки компилятора. Агрументы же в x64 передаются не по стеку, а через регистры (64битные). Вот похоже он дурит. 0x018e8d0 (которое в rect.left) это наверное указатель, а компайлер (или отладчик) дает структуру :) проверь память ради интереса?
TRACE(L"%d, %d, %d, %d", rect.left, rect.right, rect.bottom, rect.top);
выводи нормально, это глюк дебагера. Вопрос как исправить? Может hotfix какой есть
покажите ассемблерный код. Похоже, что в оптимизированном коде это функция не вызывается вообще, так как в теле функции есть только инициализация временной переменной.