My guess is the combination of dynamic branching + vface breaks something in the compiler (bug). Try kauna's refactored code (seemed to produce saner asm when i tried it) or try putting a [flatten] in front of the if statement.
UpdateSubresource is for updating the contents of a buffer, not for binding it. What you're looking for is ID3D11DeviceContext::PSSetConstantBuffers and the VS/GS/HS/DS equivalents. Are you using something that hides that part (Effects11)?