Yes, it's cache related.
When you execute "addtemplate" from stsadm, the template file is actually saved to the content database. To be specific, it will be added as a custom global web template " SPPersistedCustomWebTemplate" through the SharePoint "SPWebService" object (which is a sort of helper object that helps SharePoint Web Application retrieve and cache data from the content database and also other stuff).
My guess is, since the application pools are already loaded in memory with cached stuff with the help of the SPWebService (application pools are actually associated to this helper service before even being associated to an actual SPWebApplication), an IISRESET guarantees the recycling of the cached objects.
To learn more about how the template is being added, you can reflect against STSADM, and find "SPAddTemplate" class.