Sorry to hear you are having trouble! A tucked tail is a sign that the dog is uncomfortable, so I agree with you, it sounds like the dog is afraid. Some dogs are afraid of children. Maybe your son just moves more quickly than his parents do.
I would use gradual steps. Make sure your son uses non-threatening body language around the puppy - don't look directly at the dog, turn your body sideways, don't bend over the dog or try to pat the dog on the head. It can also help if your son lies on the ground and lets the dog approach him.
Try having your son toss treats to the dog, feed him at meal times, go on walks with him, etc. You may want to step back here so that the puppy sees your son as the provider of Good Things.
Also, gently correct your puppy if he shows aggressive behavior like barking at your son. If the dog is on your lap when he barks, say "no" and put him on the ground for a few seconds. You can repeat this over and over until your pup realizes it's better to be nice.
If you get Animal Planet, watch 'It's Me or the Dog', it's a great training show.