Thanks for leaning in Anthony.  Alas, your pointer has not yielded a solution yet.  Specifically, I looked at the powershell script and include the following relevant portion:
#region: POST - Add vCloud Org
"`nCreate vCloud Org..."
[String] $URL = $Proto + "://" + $Server + ":" + $Port + "/api/vCloud/orgConfigs"
$VCloudOrganizationConfigCreate = @{uri = $URL;
                   Method = 'POST';
    Headers = @{'X-RestSvcSessionId' = $AuthXML.Headers['X-RestSvcSessionId'];
                                'Content-Type' = 'application/xml'}
Body = @"
<VCloudOrganizationConfigCreateSpec xmlns="
http://www.veeam.com/ent/v1.0" xmlns:xsd="
http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance">
    <OrganizationName>$org</OrganizationName>
    <BackupServerUid>$BRServerUID</BackupServerUid>
    <RepositoryUid>$BRRepoUID</RepositoryUid>
    <QuotaGb>$Quota</QuotaGb>
    <TemplateJobUid>$BRJobUID</TemplateJobUid>
    <JobSchedulerType>Full</JobSchedulerType>
</VCloudOrganizationConfigCreateSpec>
"@
           } 
 
 $VCloudOrganizationConfigCreateXML = Invoke-RestMethod @VCloudOrganizationConfigCreate -ErrorAction Stop
#endregion
Which is remarkably close to my own construction.  The two obvious differences for me are:
1.  I was not including the header 'Content-Type'.
2.  I was not including the TemplateJobUid tag in my XML
So I adjusted my code to add the Content-type.  The XML does not require the TemplateJobUid (according to the documentation), but I added that tag anyway.
Alas the results were identical: <Error Message=\"Specify VCloudOrganizationConfigCreateSpecType\"
I can add that I'm using API v1.3.  I don't know the differences between this and 1.2.  However, if I switch to 1.2 I can't even authenticate against the API with the same credentials.  So I'd prefer not to go down to figure out the differences in the API from 1.2 to 1.3