Geovane para melhor entendimento do beginPath(), você já experimentou retirar ele do código, utilize o código abaixo e retire a função onde ele desenha o circulo e verá a diferença.
<canvas id="tela" width="600" height="400"></canvas>
<script>
var tela = document.getElementById("tela");
var c = tela.getContext("2d");
c.fillStyle="green";
c.fillRect(0,0,200,400);
c.fillStyle="red";
c.fillRect(400,0,200,400);
c.fillStyle="gray";
c.beginPath();
c.moveTo(300,200);
c.lineTo(200,400);
c.lineTo(400,400);
c.fill();
// retire aqui a função beginPath e vera a diferença!!!!!
c.fillStyle="blue";
c.beginPath(); // <-------
c.arc(300,100,50,0,2*3.14);
c.fill();
</script>