Я думаю, что решение состоит в том, чтобы переместить ctx.lineWidth = 2 внутри requestAnimationFrame. Когда я изменяю ширину вручную, я вижу то же самое поведение, ширина линии по умолчанию. Итак, вот рабочая скрипка, которая решает вашу проблему:
https://jsfiddle.net/ibowankenobi/skgn9q51/2/
function draw() {
ctx.fillStyle = '#e8e8e8';
ctx.fillRect(0, 0, window.innerWidth, window.innerHeight);
ctx.lineWidth = 2;
......
Я думаю, что это поведение предназначено. Поэтому, чтобы получить значение lineWidth, вам может потребоваться прибегнуть к save () restore ();