I just had something like this happen this last weekend, except it wasn't about weight, but something else entirely personal. Family visit and a few family members were debating and talking about my boyfriend, while he sat there, and some of the things that one family member said were absolutely insensitive and just out of bounds. Not that it was intentional, but to be honest, she put her foot in her mouth and I hope she realizes she should "edit" her words next time. lol. She basically was debating with ME and EVERYONE about my boyfriend like she knew him more than his own parents and oh me and him! lol.
I think sometimes people just do not think before they speak. I would be upset with your friend as well and to be frank, it isn't her place to say anything about who you date or what your decisions are. Not saying it was an intentionally malicious thing (though saying the guy you are dating is bottom of the barrel is pretty offensive), I agree she probably cares, but sometimes it is an important lesson to know when to shut up lol.
The thing is, if you are a true friend then you like someone because you like them. You're a grown woman, a beautiful one at that, and hearing what she thinks about who you are dating is absolutely out of bounds. Me, I would set up the boundaries and explain that it isn't up to her who you date or not. That is what I have learned from this last weekend, BOUNDARIES! I will no longer include my family friend in certain discussions because of her behavior she showed this last weekend. I'm not going to be mean about it, but I'll just adjust myself as needed and set up those boundaries.
You could talk to your friend, express your feelings, set up those boundaries. I think she clearly hurt you and on a day where you should have been there celebrating, happy birthday by the way, clearly she was out of bounds. A good talk might be good, I don't think you want to lose your friend. Besides she may not realize that you were hurt, sometimes people don't make that connection.