You can check that the viewer does properly send the mic on/off commands via the log, by enabling the debug console ("Advanced" -> "Consoles" -> "Debug console") with the "Vivox" debug tag ("Advanced" -> "Consoles" -> "Debug tags") enabled/checked.
The log should show the following message when the mic is enabled:
(the important part being "<Value>false</Value>")
And when you disable the mic, it should show:
(i.e. the mute value changes for "true").
If you see this, and do not see spurious messages similar to the above when not switching the mic on/off yourself, then the viewer does properly its job and the rest (SLVoice.exe and mixer code) is not under its control...