I think this is a bug.
From the API Explorer, I can successfully run this to create a new case, and it is auto-populated with the default Sequence:
$result = civicrm_api3('Case', 'create', array( 'sequential' => 1, 'contact_id' => 4243, 'case_type_id' => "member_application", 'creator_id' => 1033, 'subject' => "Application", 'medium_id' => 6, ));
But running that same code as a hook fails with the error:
CiviCRM_API3_Exception: "source_contact_id is not a valid integer"
It actually does create the case and the initial Open Case activity, but seems to fail while trying to create the first activity in my Sequence, which is not created.
I can fix it by editing api/v3/utils.php and adding this at line 1956:
if ($fieldValue =='user_contact_id') $fieldValue = 1033;
I think what's happening is that somewhere along the line, it sets the value of source_contact_id to 'user_contact_id'. The _civicrm_api3_validate_integer function is supposed to replace this with the currently logged in user. This works correctly when running from the API Explorer, but not when running from a hook.
The proper solution would be to pass the API "creator_id" through to "source_contact_id" for the extra activities, but I don't know how to fix that. My hack to hard code the contact works for me for now.