Oie Sergio, tudo bem contigo??
Antes de ir para diferença, vamos para a semelhança.
Como você mesmo percebeu, ambas as anotações funcionaram na mesma situação mas elas não seriam as únicas, tanto a @Component quanto @Repository também funcionariam nessa mesma situação. Isso acontece por conta da detecção automática de varredura e injeção de dependência do BeanValidation que considera essas 4 anotações iguais, por isso podemos usar uma no lugar da outra.
Agora para explicar a diferença vou focar apenas na @Service x @Controller, mas no final vou deixar um link para uma discussão muito boa que achei no qastack que explica muito bem todo esse tema.
@Controller:
- Indica que uma classe específica possui a função de um controlador. Esse anotação atua como um estereotipo para a classe aonde foi escrita, e indica sua função. Não podemos substituir essa anotação por outra como a 
@Service, a não ser que a classe já tenha sido registrada como "bean", usando o @Bean e tiver sido definido o @RequestMapping. 
@Service
- Apenas mantêm a lógica de negócios e faz a chamada de métodos na camada de repositório.  
 
Link para uma discussão desse tema no qastack.
Espero ter ajudado, qualquer coisa fico a disposição :)
Bons estudos!