Probably for the same reason that "four" is spelt with a 'u' but "forty" isn't: ¯\_(ツ)_/¯
Number words tend to develop very differently sometimes, even though they derive from the same root. Even more so in a language with silent letters, so that's probably what happened.
EDIT: Okay, I looked it up: halvtreds is a short form of halvtredsindstyve, which in turn consists of the parts halvtredje (two and a half), sinde (times), and tyve (twenty). Halvtredje literally means "third half" (it's the third after "one half" (halv) and "one and a half" (halvanden)). Tres is short for tresindstyve, "three times twenty".
So the 'd' comes from the difference that the "tred" in halvtreds stands for "third", and the "tre" in tres means "three".
That is right. It's half-three, which accounts to 2½. Like in some countries where people say the time as 'half four' when it's 3:30.
EDIT: apparently that "half four" thing isn't commonly done in English-speaking countries. But you can find it in continental Europe, like in Denmark: "Det er halv fire" - "It is 3:30." (literally "half four").
Some British speakers actually one-up this and talk about the half hour after the hour, i.e. they call 3:30 "half three".
Grandad is currently not an accepted translation for bedstefar in this sentence.