Going back to the original question format:
A) I find I need a scrum master to facilitate daily team process and guardrails, they may (based on their experience) also be a local agile guide/coach. But they might be green, and need to be coached by someone elsewhere. A team lead could fill the role of senior technical… the person who clarifies direction when the team can’t self-manage, or a senior voice that guides technical skills based on experience (which could include pair programming and TDD, so I see how someone could split this from the other two roles). The Agile Coach is a person who “cross-pollinates” across teams. In environments of 3 or less teams, the Scrum Master and Agile Coach are likely one in the same (my last 3 jobs), but if the company scales, it makes sense to consider an agile coach when either the SM’s are green and need support, or when there are 3 or more SM’s.
B) Yes, if there is scale. I currently behave as a “practice lead” (Agile Coach) that provides training, guidance, and direction for the company’s agile community at large. I work with SM’s, Dev Managers, and PO’s directly. I sit in all retro’s, and I put time into strategic projects to mature the process and tools that support it while the others stay tactical.
C) for me, all arguments are based on scale and experience. Bigger means splitting, smaller means combining. Sometimes you bring in “an experienced expert” to boost your situation.