D.W.
I would recommend making his nap shorter and slowly adjust back to normal time. say by an hour a day. 1/2 shorter nap or earlier, then 1/2 hour change to when he goes to sleep - that will probably take about a week to get him to change, but it should work. We've had our share of kids being up in the middle of the night - they all went through it but adjusted back.
Also, if your son gets hyper from benadryl - mine did too - maybe give him a bit of coffee to see if that calms him - it worked for my kids believe it or not - so you might want to try. We used frapachinos - so, you never know.
Another thing is to just exhaust him during the day when he is up so that he has to rest - swimming is the best thing for that.
Hope that helps.