Respostas:
A inicialização a partir da memória do sistema chama o gerenciador de inicialização no chip, presente no chip diretamente da fábrica, antes de você programar algo no flash do chip. Isso permite que você carregue o código (programa) no dispositivo a partir de uma interface externa como UART ou USB. Isso é explicado em detalhes no manual.
A memória flash principal é para onde o seu código normalmente vai. Em operação normal, seu código residirá no flash e, no Power On Reset (POR), a CPU buscará o vetor de redefinição e o ponteiro de pilha inicial (SP) do flash. Você pode carregar o flash via JTAG, gerenciador de inicialização no chip (acima), etc.
Por fim, você pode carregar o código na RAM (JTAG, tempo de execução) e depois inicializar / executar a partir daí. Isso nem sempre é usado; geralmente você está fazendo algo complicado, como um carregador de inicialização temporário ou algo semelhante.