On my own for close to 15 years now.
1) Mostly full stack web/app development. Code for completed, tested app is the end point deliverable.
2) Give them access to my repo, push to their repo or send a zip
3) Mostly before, especially if it is a trusted client relationship.
4) Check or ACH.
I think however you are asking small scale questions that only concern you in relationships that are lacking in trust. An easy way to change the dynamic is to work on a retainer with clients. It takes some convincing but often times the conversation about it alone will help you sniff out if there is going to be issues. People who push back and say they would never work that way, are typically not good clients. People who understand the scenario and agree to it or agree with simple and logical conditions are the people you want to work with.