Cache target table template tuple and its schema in insert executor, to ...

...avoid serializing default values on every insert.
I am actually caching the TupleSchema in the InsertExecutor object, making an explicit copy, because I was seeing exactly the problem you mentioned.  When I didn't copy the tuple schema, it was going away after a truncate table, and the TupleSchema* that the executor had held onto pointed to garbage.  I was able to reproduce this easily.

It occurs to me that perhaps the class TableCatalogDelegate exists for exactly this reason?  It persists when even the underlying PersistentTable goes away?