bbswitch fails to turn off discrete graphics

The bbswitch README is quite clear on this:

Users of kmod should create /etc/modprobe.d/bbswitch.conf containing options bbswitch load_state=0 to set the default options. To load the module, systemd users should create /etc/modules-load.d/bbswitch.conf containing bbswitch.

In order to allow bbswitch to turn off the video card, you must also prevent the nvidia modules from loading (nouveau in your case). On my system, I have created /etc/modprobe.d/nvidia.conf containing:

blacklist nvidia
blacklist nouveau
options bbswitch load_state=0

Next, initrd should be updated using dracut --force

When using Bumblebee, the above is strictly not necessary (the daemon will unload modules and use bbswitch on start-up). Due to race conditions however, it is possible that the bumblebee daemon starts simultaneously while the nouveau driver is being loaded. Therefore it is still wise to blacklist the modules.

Note that when optirun foo fails under some conditions, the nvidia card is not disabled. That is why you observe that the nvidia graphics is still enabled.