Try keeping him up later in the evening, and/or shortening his day-time nap. Also, try giving some good physical activity a couple of hours before the bedtime routine starts (but not right before it starts); cut out TV/radio/loud or very stimulating toys for the hour or two before bed.
Start keeping a journal of his activities, his wake-up & going-to-sleep times, and even his food to see if you can start to find a pattern.
The sleep cycle in the morning (or close to when you will be waking up naturally) is lighter, and it's easier to wake from this sleep state. With our 2yo, if he wakes up after 5 or 5:30 am, he might dose if I rock him in a dark room, but never go back to sleep fully again, because of where he is in the sleep cycle, I think. With him, he has been crying a lot when he wakes, especially if it is early like that (he'll usually sleep till 6 or 6:30 am), and I think that he is dreaming and his dreams, which he doesn't understand, are scaring him. He just started doing this, once or twice per week, sometimes at night (between 11:30 pm and 1:30 am) and sometimes at 5 or 5:30 am. It's not every day, or even every other day...
If all this fails, try putting down a sleepbag right next to your bed, and telling him that if he wakes up scared, he can come and lay there--but he is to be quiet because nighttime is for sleeping and if he isn't quiet and doesn't lay down and be still, he'll have to go back in his room. My mom used to hold my brother's hand when he was 3 and 4.... Dad let him watch part of The Shining (hello?? Dad what where you thinking??) and my brother had nightmares for a year (no kidding) and every night, he'd go to sleep in his room but would wake up and come into my parents room and lay on the sleeping bag and hold my mom's hand (over the side of the bed) until he fell back asleep....