Bruno,
tá certinho seu código e seu contador. Muito bem.
Quanto a ficar melhor, bem, sua variável 'y' não precisa ter atribuição de valor zero duas vezes.
E se usar um 'for' ao invés do 'while', junta 3 linhas em uma.
E também dá pra eliminar o incrementador do 'x', 'disfarçando' ele na atribuição de valor:
<canvas width="600" height="400"></canvas>
<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
function desenha(n){
for(contador = 0; contador < n; contador++){
var x = contador * 50;
var y = 0;
pincel.fillStyle = 'green';
pincel.fillRect(x, y, 50,50);
pincel.fillStroke = 'black';
pincel.strokeRect(x, y,50,50);
}
}
desenha(2);
</script>
Mas são só sugestões. Seu código está bom assim, e faz o serviço com a mesma lógica.