During the development op 1.5, IPageProvider and its implementations have become a bit of a mess. The interface is not clearly defined. One of the biggest problems is that several methods can throw exceptions and there is no way of knowing which method will throw which exception and when. It should always be clear what exceptions to expect. For example, getPage can throw a PageExpiredException, but getPageClass cannot, it should return null if no page class is set. Perhaps, it's even better to never throw exceptions at all. Also, the various introspection methods are not very well defined and make it almost impossible to come up with an alternative implementation of the interface (which, IMHO is a sign of a broken API).
Changing this interface is not an option for 1.5, but looking at the number of subtle bugs that came from this part of the code, it should really be considered for wicket.next.