Our DS takes a long time to fall asleep too, he is 29 months, and has been home 3 months.
Our routine is this, begining at 7:15:
*Bath time
*PJ time
*Read 2 books
*Sing 3 - 4 songs (with hand motions - he loves music)
*Lights out, and he is put in his crib (no night light to stimulate him, he isn't scared, so dark is better)
*Prayers, his first (repeat after me prayer), then mine (aloud)
*Stories (I tell two short stories that I make up in the dark sitting by the crib)
*I turn on his lullabye CD
*I sit in the room quietly for 2 songs
*I tell him goodnight and that I love him and leave the room
8:00 - done. 45 minutes is our total bedtime routine
Listening to the monitor, I can tell that it takes him 30 minutes to 2 hours to go to sleep. Sometimes he babbles, or he sings (I think

), occationally he calls for me (although I don't respond). He will toss out his pillow, or have a wrestling match with his blankie. Eventually he goes to sleep.
Once I leave the room, I don't go back in (they catch on to getting you back in the room really quick - they're smart little buggers). I also don't worry about how long it takes him to fall asleep. I consider crib time as restful time whether he is actually asleep or not.
Funny story: One night DS was actually crying after he had been in his crib for an hour. He sounded upset, so I thought that he was either stuck in some odd position, or he did fall asleep and had a nightmare. In either case, I decided this night that I would go back in to his room and check on him. I went into his room in the dark and was just going to pat his tummy to tell him that I was there, and to settle him down. I reached down and touched him and he was naked fromt he waist down.

DH had put him to bed that night (we alternate nights) and I thought that surely DH didn't get distracted in the process and leave off his diaper and PJ bottoms.
Well, apparently DS was so bored with trying to go to sleep that he decided to take off his PJ bottoms himself, then he took off his diaper. The only reason he was crying was that eventually he wet himself, the bed, and his discarded PJ's. DS got a little treat that night by getting to get out of bed at 10:00 and run around while I resheeted his crib. The next night he wore the PJs that have snaps to attach the top to the bottom.