Ответ 1
Угол поворота на него рассчитывается на основе нуля 0,0, но квадрат вращается вокруг его собственного центра на 100, 100, поэтому они не совпадают. Если вы переместили квадрат на 0,0, он чувствует себя хорошо:
var rect = new fabric.Rect({
fill: '#00FFAB',
top: 0,
left: 0,
width: 100,
height: 100,
selectable: false
});
Вместо перевода в холст-координаты в toLocal переведите в координатное пространство квадрата.