That's because you are always calling the same static method, SHA256.Create. SHA256 is an abstract class and its descendants do not provide an alternate method. In fact, Resharper will give you a warning that you are accessing a static member from a derived type.
In fact, calling SHA256.Create is the same as calling HashAlgorithm.Create. Both classes call the same implementation internally and simply cast the result to different types.
The SHA256.Create method will create the default implementation that is specified in machine.config and can be overriden in your app.config
If you want to use a specific provider, use SHA256.Create(string) passing the name of the provider you want to use.
Examples are:
SHA256.Create("System.Security.Cryptography.SHA256Cng");
HashAlgorithm.Create("System.Security.Cryptography.SHA256Cng");
SHA256.Create("System.Security.Cryptography.SHA256CryptoServiceProvider");
EDIT
The documentation of HashAlgorithm.Create specifies a list of valid algorithm names. The MSDN article Mapping Algorithm Names to Cryptography Classes describes how you can map algorithm names to other providers (your own, third-party, hardware-accelerated or whatever) and use them instead of the default algorithms.
EDIT 2
It is also possible to change the mappings programmatically. So, to map "Dog" to the SHA512CryptoServiceProvider, you just need to write:
CryptoConfig.AddAlgorithm(
typeof(System.Security.Cryptography.SHA512CryptoServiceProvider),
"Dog");
var t4 = HashAlgorithm.Create("Dog");