How can I have a fixed date membership with no rollover date?
I tested this a bit and you are correct.  If someone signs up Dec 31st they get the whole next year.  Probably the easiest thing to do is not offer a discount for the Dec.  Pay the full price and then make the rollover date Dec 1.  Yes they will get one month free but only the first time.

Probably the code should be changed so that it is greater than and not >= since the membership starts the next day by default anyway.  Or if you set the start date and rollover date the same, it doesn't give you two full periods for the price of one.