Logically, I cannot see a reason why this error would occur, based on the debug backtrace you posted. Before any insert queries are run on xf_template_map, the table is truncated. If the table is not truncated (but I believe VaultWiki does), then all entries for the style being updated are first removed. The script inserts the rows from an array that goes style > delete style rows, title > insert. This order suggests, that unless this function is overridden (which the backtrace suggests it is not) that two rows will never be inserted by this function that have the same unique key (like 0-account.css)
The only possible way I can imagine is if the MySQL user that is connecting to the database does not have permissions to run a TRUNCATE action. Assuming this on its own doesn't throw an error (I imagine it should), this might cause the rows to still be present when the insert takes place. Please confirm whether the MySQL user employed by XenForo's config file can or cannot use TRUNCATE commands (user would have DROP privileges).
EDIT: Just tried with a user without DROP privileges, and there is first an error that DROP is denied for user, so I'm at a loss. This might be something like a race condition between 2 simultaneous requests to the installer (some old browser toolbars did this). You might do well to request a free pro install at the support site.