This is reasonable. Using DELETE causes each row to be logged to the transaction log. Having Truncate Log on CheckPoint enables has zero effect in this situation. SQL Server still has to log each row since the whole thing - all 3 million rows - makeup the one transaction. If something should occur, SQL Server would restore all the rows that had been deleted up to that point.
If you truly want to remove all the rows, use the TRUNCATE TABLE command.
-Mike