I think you're right in that some of this is a developmental thing. To a young child, 'higher' actually means 'taller', it doesn't mean more vibrations per second!
You need to actually connect a physical movement with the vocal pitch. Your son can clearly pitch the various notes easily, he just needs to connect his vocal pitch with a physical movement and the correct vocabulary - all at the same time.
Maybe sing two notes to him (I think it's better initially to use another human voice rather than the piano which has such a different timbre - this can also cause problems) that are a fair distance apart (eg 6th/octave) and put your hand up high or down low appropriately when you sing them. Ask him why you put your hand in different places when you sang. This should - hopefully - elicit the right vocabulary. Then ask him to close his eyes and see if he can show with his hand which of the two pitches it is that you're singing.
Gradually refine this down so that the interval becomes smaller. You can use a variety of movements including touching his head when he hears/sings the higher pitch and his shoulders when he hears/sings the lower pitch.
Play a 'stand up/sit down' game with him. You sing 'stand up' to s-d' (probably A-D' or G-C') and 'sit down' to s-d (A-D or G-C) and he has to do whichever one you sing. Try to catch him out by singing the same one twice or even three times in succession. Then - without warning - sing the next one just with a vocalisation (eg 'doo-doo') instead of the words and see if he will do the correct movement. If he does, then ask him 'How did you know that was a 'stand up' signal?' - which again, hopefully, will elicit the correct vocabulary and you will be able to gauge the level of his understanding.
Sing an ascending major scale and ask him to draw in the air with a 'musical pencil' the direction that your voice is going (again reinforcing the 'higher'/'lower' vocabulary). Do the same with a descending scale. As with the musical signals, play a game where he has to slowly show with his hand - or actually gradually stand up or sit down to whichever direction he hears. Again sometimes repeat the same one so that he doesn't just assume that the next one will be different.
Then tell him that you are going to try to catch him out with one of the tunes you sing. Do the ascending/descending scale game as before - but then sing just on one pitch and see if he notices what you have done (hopefully he will realise that he has to stand still and not move himself higher or lower). If he can describe it as 'you stayed on the same pitch' then that tells you exactly what he is hearing and understanding.
Sing (later, play) two random pitches to him within the octave range that he is comfortable in. He has to sing them back and clap his hands in a high/low position - this again will show if he is understanding the pitch differences that he is hearing and singing.
This idea can then be developed to using three pitches, in which case he would clap in high/middle/low positions as he sings. This is much more difficult!
The ideas I've given are sequential in order of development/difficulty.
As I said, he just needs to connect the sound he hears, the sound he sings, with a physical movement and the appropriate vocabulary. Asking open-ended questions will help you to gauge the level of his understanding.
A further development of all this is to learn solfa and the accompanying handsigns, which refines pitch understanding and facility still further. Please do ask if you want to know more about this.
Good luck and have fun!