Welcome to the RTA forum!
When you need to cut a trip basically in half, you can't start small -you have to chop off big sections. The easiest place to start is to get rid of the places that add the most miles.
Considering your primary goals are Yellowstone and the Grand Canyon, I'd start by getting rid of everything that's not in between them - namely everything in South Dakota and much of Colorado.
From there, you can work on saving more time by making your trip more efficient, and by trimming time from other stops.
In terms of efficientcy, I think you'd be looking at a loop that would take you from Yellowstone/Tetons down to Moab, Mesa Verde, Monument Valley, Grand Canyon, Lake Powell, Zion, Bryce, and back to SLC to save some miles.
Even that still probably won't be enough, so that leaves you with trimming what you have left, and in your case, that means spending less time at places. Right now, you've almost got 2 full weeks dedicated just to the Lake Powell-GC-Zion-Bryce section of your trip. That would be great if you had that kind of time, but on a 3 week trip, you just don't. Most of these places you can explore quite nicely in a day or two, certainly not seeing everything, but still having time to do some hiking and have a good time.
The one place I would not cut any time from, however, is the Yellowstone section. That is a huge area that really does need at least a few days to see the high points. I'll also highly recommend Mad River Tours in Jackson if you are looking for a guide for rafting on the Snake - something your kids will love.