Most simple algorithm for understanding is just get ForwardVector, then multiply it my -1.0f and convert to Rotator.
In C++ it's like
FRotator NeedRotator = (Camera->GetActorForwardVector() * -1.0f).Rotation();
An easy fix could be creating two different material slots with two different domains. To create two different materials slots you have to go in your 3d software of choice. In this way you can have your opaque face with the default material domain:
I set the "two sided" option to true because as I understood you want to see the opaque face from ...
Well... PostEditChangeProperty(struct FPropertyChangedEvent & PropertyChangedEvent) worked, apparently. But it is called not on value change, but on blueprint compilation after that (which is why I thought that it didn't work before)