Происходит примерно то же самое, что и при непропорциональном изменении размеров картинки.
CANVAS по умолчанию имеет размеры 300 на 150. Присваивая ему стиль "width: 100px; height: 100px", вы неравномерно сплющиваете картинку 2:1 до соотношения 1:1. Отсюда получается искажение.
Чтобы решить проблему, элементу CANVAS нужно задать его исходные размеры через атрибуты, например: