The problem here is there is no way to tell whether an IP packet was written with a DSCP tag or IP Precedence hence your dilema. DSCP is in theory backwardly compatible with IP Precedence:
If you examine the Binary:
000 000-111 (0-7) will match IP Precedence 0
001 000-111 (8-15) will match IP Precedence 1
010 000-111 (16-23) will match IP Precedence 2
011 000-111 (24-31) will match IP Precedence 3
100 000-111 (32-39) will match IP Precedence 4
101 000-111 (40-47) will match IP Precedence 5
110 000-111 (48-55) will match IP Precedence 6
111 000-111 (56-63) will match IP Precedence 7
If your class map is matching against IP Precedence then it will only look at the first 3-bits of the ToS field and ignore the next 3-bits. You could re-write your class-map to match against DSCP but specify the direct DSCP/IP Precedence equivilents - i.e. match DSCP 0,8,16,24,32,40,48 or 56 this way the 4th, 5th and 6th bits of the ToS field must be set to 0 for a match.
Andy