My problem was that the .invoke method only supports simple name value pairs and was not compatible with elements. I had use the .invoke_elem() method to pass the objects correctly.
snapdrive_user = NaElement("useradmin-user")
useradminuserinfoElement = NaElement("useradmin-user-info")
snapdrive_user.child_add(useradminuserinfoElement)
useradminuserinfoElement.child_add_string("name", "snapdrive")
useradmingroupsElement = NaElement("useradmin-groups")
useradminuserinfoElement.child_add(useradmingroupsElement)
useradmingroupinfoElement = NaElement("useradmin-group-info")
useradmingroupsElement.child_add(useradmingroupinfoElement)
useradmingroupinfoElement.child_add_string("name", "Administrators")
#print(snapdrive_user.sprintf())
opsmgr_user = NaElement("useradmin-user")
useradminuserinfoElement = NaElement("useradmin-user-info")
opsmgr_user.child_add(useradminuserinfoElement)
useradminuserinfoElement.child_add_string("name", "OpsManager")
useradmingroupsElement = NaElement("useradmin-groups")
useradminuserinfoElement.child_add(useradmingroupsElement)
useradmingroupinfoElement = NaElement("useradmin-group-info")
useradmingroupsElement.child_add(useradmingroupinfoElement)
useradmingroupinfoElement.child_add_string("name", "Administrators")
#print(opsmgr_user.sprintf())
add_snapdrive_user = NaElement("useradmin-user-add")
add_snapdrive_user.child_add_string("password", service_acct_passwd)
add_snapdrive_user.child_add(snapdrive_user)
#print(add_snapdrive_user.sprintf())
out = s.invoke_elem(add_snapdrive_user)
if (out.results_status() == "failed") :
print ("Error:\n")
print (out.sprintf())
sys.exit (1)
add_opsmgr_user = NaElement("useradmin-user-add")
add_opsmgr_user.child_add_string("password", service_acct_passwd)
add_opsmgr_user.child_add(opsmgr_user)
#print(add_opsmgr_user.sprintf())
out = s.invoke_elem(add_opsmgr_user)
if (out.results_status() == "failed") :
print ("Error:\n")
print (out.sprintf())
sys.exit (1)