It's a glitch
The reason it sometimes works and sometimes does not is because it's an android glitch. Of all your linked contact cards, facebook, phone contact, google contact etc, whichever one has a name that comes alphabetically last starting with the first name, will override any other name. So if you want it say "mom" and you have your mom's facebook contact linked and your moms first name on facebook is Pam, it's going to show her facebook name. However, if you have a contact card that calls her mom and you have it linked with your mom's facebook and your mom's name is Diane, it will show mom in your contact list. You might have to change a name or import a new contact for this override to take place but this 100% is what happens. I've tested it a bunch of different ways. I think they might have done this on purpose just without much forethought because it's a really primitive way to make sure that a more complete name shows over a less complete name. I.e. John Smith comes alphabetically after "John". It doesn't take into account that this might not be what everyone wants. Really annoying and they need to fix it. It might be fixed with Gingerbread.