Если правильно помню - у меня проблема была в том, что при расчете использовал как размеры и положение контролов на форме, так и самой формы (как и у Вас). Где-то они уже преобразованы в соответствии с масштабом, а где-то - нет. Для начала попробуйте вычислять координаты с помощью функций ScreenToClient и ClientToScreen, не используя Left, Top, Width и Height формы
Я не знаю - баг это был или нет (если баг - то может уже исправлен), но в конечном итоге, умножая то одно то другое на Scale винды, я добился нормального отображения.
Замечу, что многое зависит от системы, на которой запускалось приложение - разное поведение на Win7, Win8, Win8.1 и Win10. Так же проверьте - выставлен ли параметр Enable High DPI в параметрах проекта - в зависимости от него API-шные функции винды возвращают разные значения.