First of all the is a golden rule for exceptions. Throw an exception only if you can't handle the error in current scope. But wait! This does not hold the other way, so don't throw exceptions whenever you can't handle errors in current scope. You can also somehow return some null value and fail silently, right?
From my experience I don't use exceptions very much. But if I do It mostly depends on two things:
1) If I need to distinguish between more than one type of error. Say a Account class may throw UnsufficientFundsException or AccountBlockedException on sendFunds() method. But this can also end with breaking up class because of "class-is-doing-too-much" smell.
2) If there starts to emerge a chain of same error checking through multiple layers without actually handling them. This is the case where you can't handle error in current scope and also not in the parent scope. Throwing an exception and catching it in layer which can actually handle it will greatly reduce this chaining.
There is another rule that says: Don't use exceptions for normal program flow. Well yes, this makes sense since exceptions are some sort of OO goto statements. But the important thing is how you define a normal flow. In my little framework I use exceptions for page redirecting. A pure "exceptionist" would scream loud, that redirecting is a normal flow. Well yes it is from the application point of view. But my controllers (some sort of reusable widgets) have only a render() method that returns HTML fragments. So normal flow is only to return a HTML fragment, a redirect is a "exception" that my controller cannot handle. The redirect exception is handled at top level in a catch block which creates a redirecting HTTP response and send it into the wild world web.
As stupid as this may seem from a purist point of view, it works great and simplifies my code greatly. I can also add more types of special exceptions. Maybe throwing a page not found exception which will be always handled at top level and return a fancy styled 404 page.
And finally closing with a useful link.
http://c2.com/cgi/wiki?CategoryException