In American English, "son of a gun" is typically positive. "son of a bitch" is more likely negative.
Also, "son of a bitch" can be a direct description of someone, very negative.
He's a son of a bitch. (Impolite. Fairly common way to say "He's bad")
He's a son of a gun. (Rare. Wouldn't really mean anything to me.)