Our company went "agile" about 4 years ago and we've been constantly adjust/trying things that could work better than existing stuff.
I'm not claiming that this is 100% (or even 50%) correct answer, but In my experience, a scrum master, should be a dedicated person. At a minimum, it should be a person that WANTS to be the scrum master. If there are two people on a team who enjoy that kind of stuff, by all means, maybe they can rotate within each other, but I believe making the entire team rotate is not a good idea.
Being a scrum master (SM) is a completely different role, than being a technical team lead (TL) which is a different role than being regular developer and it takes different personalities to be good at each one. SM must stay on top of multiple issues which are constantly popping up. If management wants to change requirements or discuss yet another "special side project", SM should take ownership of these distractions and let the rest of the team focus on delivering the iteration. SM must also keep track of what each person is doing and coordinate effort between team members. TL's focus on much more technical stuff, but 25%-66% of their effort still goes into coordinating team member effort, but from technical point, not scheduling. Unlike SM and to lesser degree a TL, regular developers are not people who juggle other people's activities in their head. Instead, regular developer is happy and works best when he is isolated from external noise and is allowed to focus on details of the code that he is working on.
If regular developer is rotated into an SM role, he will be forced to pay attention to so many new things, that he will start losing track of the important details at the code level. At the same time, when he is rotated back, he will find code that was a) potentially done without knowledge of his details and b) it will take time for him to reacquire the lost level of detail that he possessed before switching his attention to schedules/people/issues.
Also people perform best when they enjoy what they do. If you take a developer that loves coding and make him attend all the SM meetings, a) he won't really be into paying attention and his interest will be in getting back to the code rather than coordinating team activities. In the past we had people who attempted to do both roles (manage and code) and at the end they failed at both. Now we have dedicated SMs, TLs and regular devs. I guess our team was lucky because we had two developers who actually prefer paperwork, meetings, leading and overseeing over coding, so they were happy to transition into their new roles. By HR standards, they are considered first-level management.