SAS has done nothing wrong at all. DF for mixed models isn't straightforward. See the SAS STAT manual for PROC MIXED:
It is computed by dividing the residual degrees of freedom into
between-subject and within-subject portions. PROC MIXED then checks
whether a fixed effect changes within any subject. If so, it assigns
within-subject degrees of freedom to the effect; otherwise, it assigns
the between-subject degrees of freedom to the effect (see Schluchter
and Elashoff 1990). If there are multiple within-subject effects
containing classification variables, the within-subject degrees of
freedom are partitioned into components corresponding to the
SAS will also let you specify your own DF using the DDF = option, and has many choices besides BW, each of which will give different numbers.
I have even seen it recommended (I forget in which book) that the DF for the denominator not be reported.
Update by StasK: the FAQ on the degrees of freedom for a comparable mixed model R package
lmer points to a post on R-help mailing list by Douglas Bates, the author of the package, explaining the controversies surrounding these degrees of freedom.