Ambos têm seus usos. Primeiro, um pouco de história ...
$ scope é a técnica "clássica", enquanto "controller as" é muito mais recente (a partir da versão 1.2.0 oficialmente, embora ela tenha aparecido em pré-lançamentos instáveis anteriores a isso).
Ambos funcionam perfeitamente bem e a única resposta errada é misturá-los no mesmo aplicativo sem uma razão explícita. Francamente, misturá-los funcionará, mas isso apenas aumentará a confusão. Então escolha um e role com ele. O mais importante é ser consistente.
Qual? Isso depende de você. Existem muitos outros exemplos no escopo $, mas "controller as" também está ganhando força. Um é melhor que o outro? Isso é discutível. Então como você escolhe?
Conforto
Prefiro o "controller as" porque gosto de ocultar o escopo $ e expor os membros do controller à visualização por meio de um objeto intermediário. Ao definir isso. *, Posso expor exatamente o que quero expor do controlador para a exibição. Você também pode fazer isso com $ scope, apenas prefiro usar JavaScript padrão para isso. Na verdade, eu codifico assim:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Isso me parece mais limpo e facilita ver o que está sendo exposto à vista. Observe que eu nomeio a variável que retorno "vm", que significa viewmodel. Essa é apenas a minha convenção.
Com $ scope eu posso fazer as mesmas coisas, então não estou adicionando ou prejudicando a técnica.
$scope.title = 'some title';
$scope.saveData = function() { ... };
Então cabe a você lá.
Injeção
Com $ scope, eu preciso injetar $ scope no controlador. Não preciso fazer isso com o controlador, a menos que precise por algum outro motivo (como $ broadcast ou relógios, embora tente evitar relógios no controlador).
ATUALIZAÇÃO
Escrevi este post sobre as 2 opções:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/