3 year olds are much harder to deal with than 2 year olds IME. BUT - it is so important to remember that he is still very young. In many cultures a 3 year old is considered to be a baby. We have such high expectations of our very small children in our society - causes a lot of unnecessary stress and anxiety IMO.
You hit the nail on the head when you mentioned overtiredness. I would suggest starting the whole bed time routine an hour earlier, and you may well find it all much easier.
A three year old really can't get to grips with the passage of time as it relates to a clock face. However, if you have a routine and stick to it, he will feel secure - they do like to know what is coming next. So, for example, you say:
"Now we are going to get you bathed and into your pjamas, then we will have supper."
Then, while you are having supper you say:
"After supper we are going to have a story, and then it will be time for bed."
You can start a sticker chart or pasta jar system of rewards at this age, and you can say that if he is good (and cooperative) he can have a star/sticker or whatever, and then so many equals a small treat. Three yearolds can't wait long for rewards though, so targets have to be achievable, and the reward close enough to the good behaviour to make the link in his mind IYSWIM.
Positive reinforcemnet work so much better than punishments and santions at this age.
HTH