Yeah, trial or initial. It doesn't have to be free. From the first lines of your code it looks like you're doing proration, so you come up with a period of time, but this would only be for the first term, right? If you put it in the regular term, then all terms will be that long, not just the first.
Oh... I see, you're not selling a subscription, just whatever is left of the year until Dec 31st, with no recurring payments. I'm sorry, my bad.
I honestly don't know why that'd be happening. I'd suggest that you test echoing the values of your variables to see them on the page while testing, see if you notice something odd there.
And I'd enable logging, so next time a customer gets a crazy EOT time, you can look up the relevant log entries to see if you notice a clue there. WP Admin > s2Member > Log Files