He may do better with what we call "quiet time."
It really helps if his scheduled nap time is not so disrupted.
Children thrive on schedules. I know in real life this is not always possible, but if you can stay on a daily schedule a lot of this sleep situation would change.
The other thing is that young children have a tremendous amount of energy everyday.
They need to be able to run, yell, jump climb for extended times at least 2 times a day.
If your child was in day care.. he would be playing outside in the morning for at least 1 hour on a playground.. Usually it is 1 and a half hours and on great weather days sometimes they would have snack outside and extend outside play to 2 hours.. Again in the afternoons they would play outside.
Your son needs to release all of his energy.. or he will be a whirling dervish. So much energy, he cannot sleep on command.
So what we came up with on rainy days in our home was "quiet time". If our daughter would stay in her bed, playing quietly or looking a books for a set amount of time, she was not required to sleep. Her door was kept shut, quiet music might be played to block out the neighborhood sounds.
Make the routine.
Wake up, breakfast, outside play, snack on the run while you run errands.
Come home, wipe him down, have a quiet lunch.. no TV.. then quiet time or nap.
Wake up, snack on the go.. run errands, then active play, come in, make and have quiet dinner, NO TV..
Put him in a warm quiet bath.. rub him down really good. no horseplay.. PJ's.. Read books quietly.. not a time to engage son into conversations or funny sounds getting him riled up.. Towards the end of the story, begin reading slower and slower. Then sleep for the night.