She is taking her nap WAY to late in the day - a good rule of thumb for toddlers is to never put them down for a nap/bedtime less than 4 hours after they have just woken from nap. If she is taking a nap at 4pm and sleeping even for just an hour or so, trying to put her down at 7 or 8 pm is useless as she has JUST taken a nap and is absolutely not tired for bedtime! Children, especially toddlers, need lots of activity and stimulation to make their bodies ready for sleep - if shes getting up from a nap at 5 or 6, and then just hanging around the house as everyone gets home from work and has dinner, by 7 or 8, she is probably just as refreshed as she was the moment she woke from her nap and I don't blame her for being upset and crying for hours! As she must just lie awake, full of energy, until she falls asleep from crying or boredom.
You need to put her down for a nap earlier in the day so that there is at LEAST 4 hours of wakeful time between when she gets up from her nap and bedtime. Put her down at 1-2pm instead of 4pm so that she is actually tired when bedtime comes around. You can even get rid of the nap altogether, and put her down at 7pm for bed (which is an entirely appropriate bedtime for a 3 1/2 year old). At this age, toddlers need 14-16 hours a sleep a day including naps - if you are going to allow her to continue to nap so late in the day, you have to adjust her bedtime accordingly, but it is NEVER appropriate for a toddler to be awake until 10:30pm (unless its a special occasion or something).
My almost 3 year old, who is a champion sleeper at night and at naptime, has a schedule as follows:
-Up at 6:30 (IM not a morning person either, but you get up when your kids get up, its just part of being a parent)
- Preschool at 9am-12pm (only on tuesdays and thursdays)
- Lunch after preschool, down for a nap by 1pm.
- Awake from nap at 3
-Snack
-Dinner at 6
- Bathtime, bedtime routine, into bed at 7:30/8pm.
On the days she doesn't attend preschool, she goes down for her nap at 10:30am, and sleeps until about 12:30pm.