My experience is melatonin will not keep him asleep but it does get them to sleep. For ds bedtime was a 2 hour battle most nights. We tried for a year to adjust our nighttime routine but nothing helped (the changes didn't hurt and were beneficial for our girls). We tried melatonin and he was asleep in 20 minutes - it was a miracle! It has made a huge difference getting those 2 hours back.
Ds has nights where he is very restless - not upset initially but can't get back to sleep. Our pedi says it sounds like he has restless leg syndrome. He recommended upping the iron in his diet - preferrably naturally with meat and leafy green veggies but a multivitamin is ok too - and that has helped him stay asleep and be less restless in his sleep. We can usually tell when we've not been getting much iron rich food for a several days in his sleep patterns. So while your son doesn't sound like he has the same restlessness as my ds, it is worth looking at your diet and seeing if he might be deficient in any nutrients. It can't hurt to look at that aspect anyhow. The iron didn't help any with getting ds to sleep but it has made a difference with him staying asleep more (he still often gets up in the night to crawl into our bed but it is usually only the once now).