Keep the dog and your son separated unless you are in the room. If you have a dog crate, keep the dog crated or use a baby gate to keep them separated. Most three year old children shouldn't be around dogs unsupervised around dogs no matter how much you trust the dog or the child. It's too easy for them to get knocked over, jumped on, or bitten. It's not really developmentally appropriate. Yes, keeping them separated is a pain and often inconvenient, but it's probably best under the circumstances.
What you tell your son is "That is private. You don't let the dog touch your private parts (or whatever word you use)." If he argues with and says it's okay. You say, "No, it is private."
Deal with it calmly and matter of fact. Without knowing your history, it's a serious red flag to me. While you may want to avoid CPS, I would take him in as soon as possible.