TABLOCK for both truncate and subsequent bulk insert
The table lock is not taken until a statement containing that hint is executed. Since TRUNCATE cannot be hinted we must add another statement that can be. A SELECT will suffice. We want it to be fast so a restrictive predicate is good. Something like
begin transaction;

select primary_key
from dbo.table (tablockx)
where 1=2;

.. etc.

It would be nice if we could use sp_getapplock for this but it cannot, at the time of writing, address schema objects.