Вы не понимаете, как работает заливка (и stroke как ее частный случай). Рекомендую почитать
здесь.
В вашем случае правда контур определяется не "заливкой", а линией. Это область, покрываемая установленным stroke. Но все остальное остается тем же.
Теперь рекомендую на клетчатой бумаге нарисовать хотя бы 4 соседних квадрата с нужным stroke (два по горизонтали и два по вертикали), всего будет 20х20 клеток, и на нем "повырезать" различные прямоугольники. Это как раз и покажет, что выводится в "неправильных" случаях, а также объяснит, почему все это работает ровно в 10% существующих случаев

Да и ваши скриншоты закономерность очень хорошо показывают.
Кстати, если упражнение выполнять честно, станет видно, что на самом деле пунктир шириной в "полпикселя" а не в целый пиксель

.
P.S. По второму вопросу код нужно смотреть, совершенно не понятно, о чем идет речь.