Try this instead:
Signature.getInstance("SHA256withRSA", "BC");
In most of the examples I have seen, the second param has a string being passed in vs. the provider itself.
The getInstance method seems to support having a provider passed in, but perhaps just doing
new BouncyCastleProvier()
does not construct it properly, resulting in missing algorithms. I suspect by passing the "BC" string instead, it will use the already constructed provider in JCA/JCE.