This is one of those huge argument startingt questions.
If you are throwing custom exceptions they should not map directly from an internal expcetion as in your example. You should be doing some kind of conditional check to differentiate your specific need for that specific custom exception from the wide variety of possible exceptions that could be thrown.
In my view doing this can be very beneficial if done in moderation in the right places.
fo rinstance in one application i built we had a requirement of being able to back track every function call with the parameters passed in so that we can identify the precise chain of events leading to an exception.
sometimes the internal exceptions are not granulated enough. Or you need to throw an exception that tells you what kind of process failed.
Eg if you have code that is required to be transactional but works accross multiple services and so requires some manaul code to take care of things then a transaction exception is appropiate, as is a transaction rollback exception (which uually means you are in a world of pain).
Howver I know people that strongly feel that custom exceptions are a bad thing. The reason being that it is easy to get carried away and create too many custom excpetions which are meaningless and useless to everybody else.
One thing I foudn is that a RecordDoesNotExist exception feels like a DAL exception but in reality it occurs and is handled most often in business logic.
so in summary i think they are a good idea in the right places, in moderation and with good reason. But its easy to get a bit ott with them.
you should always pass the origional expcetion into your custom exception and store it there. This DOES preserve the stack trace as well as storing a stack trace in your exception for the point at which the custom one is thrown.
I use custom excpetions when auditing them is a requirement.
EDIT:
After following links in the other answer i gotta say this is a great article on excpetions
Exception Handling Best Practices in .NET
Along with this one about anti - patterns
Exception Anti-Patterns