If you use the workflow to publish using arcpy "UploadServiceDefinition" you can specify both a portalFolder and a serverFolder in the service definition.
However, depending on what you are publishing sometimes it will just ignore the portalFolder setting.
If you do the upload and then follow it immediately with a "move" the results are more reliable.
Also note that the type of service will determine where it gets published on the server, sometimes it is forced into "Hosted" folder no matter what you give it in serverFolder and if you specify serverFolder="Hosted" for some services it will ignore that and put the service at "/" (root).
Hope this helps someone.