Well, what time exactly, are you putting him to nap?
Maybe it is too early?
In the mornings, do outdoor physical activity.
Boys need that.
They need to runaround.
Then have an early lunch, then wind-down time, then make everything calm/dark/quiet. Then nap.
Or, put him to bed at night, earlier. AND thus, make dinner for him and the whole night time routine, earlier. To collaborate with that.
Or, do your errands in the MORNINGS.
THEN, come home for an early lunch, THEN wind-down, and transition to nap.
No tired kid, is going to do well, running errands, when they are tired and cranky.
For me, with both my kids, I ALWAYS did errands in the morning and their runaround time.
THEN I'd come home, early enough for their early lunch and to wind-down, prior to nap. A kid won't nap or wind-down well, if rushed.
So you gotta time everything.
THEN, my kids napped. And then, after they woke, I didn't have to rush around doing errands, because I had already done it, in the morning.
3 hours of trying to get him to nap, is too long.
For my kids at that age, or 28 months old, well my kids were still in diapers for naps and bedtime. So they didn't wake to use the bathroom. They just slept.
And my kids, even at their ages now of 5 and 8, they LIKE to drink milk before bed or nap. Even I do. Its fine.
Also, your son seems to be having his own "quiet time" in his room, when he can't sleep. So that's, good.