One possible approach might be to add an "is_active" boolean to the compiled templates table. All active templates are active. When templates have to be compiled and re-cached insert them with is_active = false. Once the time consuming process of compiling is complete, you just run an update to flip is_active and then delete the old compiles.
Maybe not as simple as I make it sound, as I haven't really dug into the template compile code, but if it'd be really nice to reduce this perceived downtime.