А как насчет рисования прямоугольника таким образом?
var el = document.getElementById('canvas'),
ctx = el.getContext('2d');
ctx.save();
// draw Rect
ctx.fillStyle = 'red';
ctx.fillRect (100, 100, 100, 100); // <===
// draw Text
ctx.save();
ctx.textAlign = 'start';
ctx.fillStyle = "rgba(0,0,0,0.0)";
ctx.strokeStyle = "blue";
ctx.lineWidth = 2;
ctx.font = "bold 35pt sans-serif";
ctx.strokeText("Hello World !", 100, 280);
ctx.restore();
РЕДАКТИРОВАТЬ ниже о проблеме strokeText, кажется, что если вы рисуете текст перед рисованием и заливка пути исправляет его
var el = document.getElementById('canvas'),
ctx = el.getContext('2d');
// draw Text -> at first
ctx.save();
ctx.textAlign = 'start';
ctx.fillStyle = "rgba(0,0,0,0.0)";
ctx.strokeStyle = "blue";
ctx.lineWidth = 2;
ctx.font = "bold 35pt sans-serif";
ctx.strokeText("Hello World !", 100, 280);
ctx.save();
// draw Rect
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(200, 200);
ctx.lineTo(100, 200);
ctx.lineTo(100, 100);
ctx.closePath();
ctx.fillStyle = 'red';
ctx.fill();
ctx.restore();