Nice work 
I created my own similar function a few weeks ago for a WordPress back-end framework I plan on releasing shortly.
You call it inside the loop with post_image(120, 150); (120 being a width, 150 being height).
The function will first check for an image link provided in a custom field named “image”, if it finds one, it uses that.
If it doesn’t find an image in the custom field, it will retrieve the first attached image from the post – UNLESS the current page is a single post page, at which point nothing will be displayed (you don’t want duplicate images in a post, after all).
Then, if the image it has recieved is on the same server as WordPress, the image will be processed by TimThumb and spat back out.
If it is a remote image, TimThumb is bypassed (since it can’t process remote images), and the image is resized using HTML .
Finally, if you don’t want a post image to display at all, you can set the “image” custom field to “none” and nothing will be displayed 
Heres the post image code
P.S. Don’t mean to step on anyone’s toes, your code is great 