To get the template processing right I need to be able to load TT templates from the database, even when they're included from another template. I've implemented my own subclass of Template::Provider which does this, called Daizu::TTProvider. It seems to work reasonably well.
I'm basing this on something called Template::Provider::DBI, which doesn't seem to have been released anywhere. I don't think my version will do caching properly, since there doesn't seem to be an obvious way of having it check timestamps of templates without looking at the actual filesystem. Still, it'll do for now.
I'm reasonably sure that it's the right thing to have the templates stored alongside the content, in Subversion. That way, if you want to make large-scale changes to a site's design then you can edit the templates along with the CSS, content, etc. in a branch. I search for templates in directories called _template. You can override templates for a particular website or part of a site by having such a directory further down the directory hierarchy.
Unfortunately I haven't yet got fully working code for editing content in the database working copies, so you can only load new versions of templates into the database by committing them in Subversion. To make it possible to test modifications before committing I've added a configuration option to tell Daizu to load templates from the filesystem instead. You can point it at a normal Subversion working copy where you're editing the templates by adding something like this to the XML config file:
<template-test path="/home/geoffr/svn/websites" />