I had the hardest time trying to figure out a similar issue to that. I was able to work around it by using the built in function media_handle_upload(). This wouldn't work in your case, as it only handles images uploaded in a $_FILES post. But you could take a look at the source of that function to see how it generates the intermediate image sizes.
The function I ended up with, after tearing my hair out trying to make wp_insert_attachment work for me, was just real simply:
function insert_attachment($file_handler,$post_id,$setthumb='false') {
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
require_once(ABSPATH . "wp-admin" . '/includes/file.php');
require_once(ABSPATH . "wp-admin" . '/includes/media.php');
$attach_id = media_handle_upload( $file_handler, $post_id );
if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
return $attach_id;
}
where $file_handler refers to an object in the $_FILES superglobal.
Hope this helps someone.