Thanks for the simplified example code, it really does make debugging these problems much easier.
Firstly the PROGMEM compatibility code is already in avr/pgmspace.h which is automatically included, so you don't need most of the big #if block. The problem is that there are two bugs in pgmspace.h:
1) sprintf_P only works if there are 3 or more arguments. There's not much point using sprintf with only 2 arguments (strcpy is better), however I think for consistency it should work.
2) sscanf_P isn't there at all!
To work around this, change the #if block to just contain the following:
#define sprintf_P sprintf
#define sscanf_P sscanf