Interesting. That is a WordPress error when it tries to get the dimensions of the image. My best guess at this moment is either the file is not fully uploading, but it could possibly be a memory thing.
If it was a memory or a timeout issue, I'd think you'd see PHP die with a relevant error message. Instead it's coming from a specific line in WordPress /wp-includes/media.php:
$dims = image_resize_dimensions($orig_w, $orig_h, $max_w, $max_h, $crop);
That is returning nothing, which means the failure happened with GD.
The best suggestion I would have to start with is to temporarily change the line after that statement like so:
if ( !$dims )
die("have a look at $file");
// return new WP_Error( 'error_getting_dimensions', __('Could not calculate resized image dimensions') );
what that will do is just stop WordPress the moment in encounters that error and it will leave the original image alone instead of deleting it. Then go on your server and download that image to see if it's exactly the same as the original.
if it is exactly the same, then that rules out problems during the upload or file copy and it means the problem has to be somewhere with the PHP GD library (or a memory issue, timeout, etc)
if the file is not exactly the same then there is a problem with the upload process (which seems unlikely but you don't know until you rule it out)