For anyone following this; I was able to get it to work by inserting an Init call as well i.e. the sequence of calls required to switch a device mid-session is (for the case of microphone): StopRecording, SetRecordingDevice(<new device index>), InitRecording, StartRecording.
Now the new issue I'm facing is that, for some reason, Windows ducks the system volume whenever I am in a webrtc call. This is well established as expected behavior on Windows i.e. when the default communications device is engaged, the system volume is ducked. However, I am using the default device, not the default communications device, so I have no idea why this is happening. In fact, I replaced all instances of kDefaultCommunicationsDevice in the webrtc source to kDefaultDevice and built a lib out of that, to try and eliminate every possibility of the communications device getting engaged, but somehow this still didn't help. I know the default device is the one being engaged because I have different devices set as default & comm, and I hear the output on the correct (i.e. default devices).
Finally, the most mysterious thing about all of this is that, it only happens on ADM2 i.e. if using the old default ADM, both issues disappear (i.e. no volume ducking happens, and I am also able to programmatically disable ducking as outlined in the MS Documentation I linked above).
I'll keep this thread updated with my findings; any help/insight from anyone would be appreciated though.