This may be a question for http://crypto.stackexchange.com, but I thought I'd try it here first as the answer may relate to .NET rather than the encryption algorithm itself.
In the RSACryptoServiceProvider class, there's a method SignHash, which:
Computes the signature for the specified hash value by encrypting it with the private key.
The first argument is the hash value of the data (which seems fair), but the second is a string stating the algorithm used to create the hash value.
The question is why does the hash algorithm matter? Surely all the method needs to do is encrypt the given value using its private key and return the result? And if it really does need to know, why doesn't RSACryptoServiceProvider have a method which does just that (Along with an appropriate Verify method)?