It kind of sounds to me like he doesn't understand boundaries. He's trying to control the situation aggressively and feels he can get away with it.
This usually happens when you allow a cat to control other situations (though it may have been ingrained by the previous owner).
For instance you mention he comes up and head butts you and stuff and you pet him. So this is telling him that through physical means he can get attention. For some cats it never goes past head butting and rubbing so it's not an issue, for some cats they will elevate their behavior once they get into a more stimulated or excited state as catlover mentioned.
You mention he does not do it with your boyfriend. I can pretty much bet that your boyfriend doesn't give him nearly as much attention in the first place and does not pet him every time he tries to solicit attention. Men often react indifferently to pushy behavior or actually discourage it, whereas woman look at it as the animal being affectionate and want to give affection back
This is often the case where you see a cat that gets very pushy toward one person for petting and not another.
The same happens with dogs where they show the man in the house more respect and distance than the woman. Women like to give affection when asked for it and the animal learns that being pushy will get it, and dogs can be especially pushy. People like to say the dog just respects him more, when in reality the man has simply been discouraging the negative behavior through his own behavior.
Of course I'm not saying this is true of all men and women, but is often the case due to the fact that women are nurturing, affectionate and more hands on to show affection on in general. Mom gently plays with the kids, gives hugs, etc., and dad is often a bit more distant, and many women relate their animals to kids so behave toward them similarly.
But the problem is that animals are not kids so they won't understand you when you say "No I don't like that!". They don't feel empathy and guilt in the same way, so rather than punishing for their behavior once they've already done it, and hoping they understand their mistake, it needs to be discouraged in the first place.
We 'punish' him the way I've read about - saying 'no' loudly and firmly and then ignoring him for a while (Annnd maybe an uncontrollable, unlady-like squeal from me when his face latched to my chin). But it doesn't seem to be getting through!
This relates to above where I said cats don't have empathy and guilt in the same way, so this is not going to get through to them.
Does the cat understand what "no" means? Probably not. And besides that, "no" is a command we use on animals WHILE they're engaging in a certain behavior or before they actually do it, not afterward. And they have to have been taught the meaning of the word through other deterence methods that they understand. For instance you teach "no" to dogs by saying "no" then averting the behavior through physical correction/removal, and/or using a loud noise to get their attention. THEN you must reward them for obeying so they know they've done the right thing and have incentive. This is true of animals in general.
So you have not used a redirection and award method with your cat to teach no, and the word will not be understood. For all he knows you just randomly shout in a weird manner every time he does it, and that's just what humans do because they're weird like that.
For animals a loud "no" works on that haven't been taught in the above manner, it's not because the word "no" means anything to them, it's the voice in which the people are saying it. For some cats saying a word loudly will break their attention and the tone of voice will tell the cat that was distasteful to you, but some cats aren't going to understand what the noise means at all. Especially if this cat has not been socialized properly, he's going to have no basis to understand that behavior.
So the behavior has to be prevented by not allowing him to be pushy to get attention. YOU choose when you pet him, not him. If he comes up and head butts and rubs on you then simply ignore him. If he's just been calmly sitting in your lap for awhile then it's fine to pet. When he starts getting pushy (such as head butting, ferociously rubbing, grabbing with paws) to get you to pet him more then stop.
Also you are going to want to practice sitting him on the ground when no petting has occurred. If he's just been sitting on your lap for awhile and you've been ignoring him then sit him on the ground. If he's just been sitting next to you you can sit him on the ground. The association with you stopping petting him needs to be broken.
You need to break the habit, which is what it is now, by breaking the routine. Change the routine around so it doesn't occur in the same order every time by changing your own behavior toward him.
Eventually you may be able to give more free affection toward him, but for now this habit has to be broken.
The things catlover mentioned are also a very good way to break those habits. Use a toy or string to distract him off of your lap or some other method of distraction.