Short story:
If theme has custom image size bigger than the uploaded image, the image should be upscaled, either according to width or to height (then cropped if crop was asked).
Long story:
Things change. In 2005, an image above 640px width was considered high-res. Nowadays, images are at least 800px. Things change, we adapt.
I recently had this old wordpress site with 5000+ posts to modernize, going from 2.3 to 3.2.1 at the time of writing. In this redesign, we want post thumbnails, and we also want 11 (!) different image sizes. Most of these size have cropping turned on. I ran a plugin that automatically assigned a post thumbnail to each article, using its images attached. Great.
Unfortunately, the old posts have small image sizes, like 320px width when the set image size is 400px width. And sometimes the best image is not available at the target resolution. I expected the upload script to take my image size as a "must do", not as a "will try to do" and zoom-crop the image so as to produce the 400px width image out of the 320px original...
Thank you for listening.