Consider a pull-down-to-refresh gesture for any updateable content that it's already possible to scroll vertically through which sorts items in reverse chronological order. Examples:
- Content feeds (twitter, RSS)
- Inboxes (email, SMS etc)
That's probably the only appropriate use case. For a vertical scrolling tableview that sorts items in chronological order (oldest first), you would be better off using a refresh button, because pulling down to append items at the bottom of a list would be awkward, as might a pull-up-to-refresh gesture.
Consider a refresh button when the thing(s) being refreshed are single interface items or widgets, or when list items are sorted in chronological order. Examples:
- A single web page in a browser application.
- A weather widget.
Consider no refresh button (or automated refresh in addition to a button) whenever the thing to be refreshed becomes stale within the space of a minute or less. Examples:
- Live stock data/charts.
- Server/background process monitoring.
- Auction reporting.