Hmm...for some reason, I thought that we did this in some places throughout core.  A cursory overview seems to indicate we don't.  I still think it would be nice - same basic idea afforded to us by get_post() and other similar functions/classes in WP core.  The ability to pass either a Post ID or a WP_Post object is nice.

The way it's done in get_post() would be fine, I think. 

`if ( is_a( '$purchase_log','WPSC_Purchase_Log' ) ) $log = $purchase_log else $log = new WPSC_Purchase_Log( $purchase_log )`