No matter how I call the update or update! methods, I get the following error:
INVALID_TYPE: Must send a concrete entity type.
Doing some research, it's because you're setting the sobject_type wrong.
The final XML should look something like this:
NOTE the tns:sObjects xsi:type attribute that holds the sobject_type of "Account"
(see the Update() API Calls section (Scenario 7))
<tns:update>
<tns:sObjects xsi:type="urn1:Account">
<tns:Id>006A000000Lbiiz</tns:Id>
<tns:Name>Whizbang Corp</tns:Name>
</tns:sObjects>
</tns:update>
Not this (which is what it's doing):
<tns:update>
<tns:sObjects>
<ins0:type>Account</ins0:type>
<tns:Id>006A000000Lbiiz</tns:Id>
<tns:Name>Whizbang Corp</tns:Name>
</tns:sObjects>
</tns:update>