Should you generally pass errors that occur in functions and class methods back to the caller to handle?  What are cases when you might not?  I'm asking because I am creating a module to perform the oauth dance, and if you get a negative response from the websites you are trying to access I'm not sure if I should pass it up to the caller, or handle it there.
It generally depends on the answer to two questions:

What layer has the information to explain the error, and present it to users or developers?
What layer can correct the error, in a way that the upper layer cannot tell it ever happened?

Examine the problem layer by layer. Find where the error can be caught, corrected and transparently handled. Failing that, find where the error can be explained in useful terms, and enriched with relevant information.
It's often the case that the function that actually encounters the error can neither explain it adequately nor correct it. It should raise an exception, delegating the decision to the upper layer, possibly attaching additional data to the error.
When the exception has climbed high enough, you'll find yourself in one of the 2 cases I described above, in a position where you can either correct the error transparently or report it in clear language, with the information needed to track down the cause.
In the case of your OAuth module, you should:

Decide whether retrying the action makes sense (eg network error)
Determine the cause of the problem (eg wrong credentials), and raise an exception that clearly conveys that.
What is best practice regarding passing errors to the caller?