Soft credits created via API/hook_civicrm_post are automatically deleted in Civi 4.6
This is to do with code introduced in CRM-16804, and is specific to soft credits.  It's not a generic API issue as I'd feared.  I'll update this answer with a more complete solution once I've nailed it down.