I too wondered why you didn't use MERGE; I see you answered that by saying this was a method you had developed under SS 2005, which didn't support SQL MERGE.
I had a fairly similar requirement within a SSIS 2008 ETL application. I loaded data into a staging table as you do, but then did the rest in a single MERGE statement. In my case, I didn't need to record change history, however that could be added using an OUTPUT clause. For earlier SQL Server versions, one could probably do the same thing with UPDATEs and INSERTs and triggers.
Having built a fairly big SSIS application, I find that as I add functionality, I no longer add further SSIS task boxes. Instead, I add to the SQL procedures that process the data after loading, and also write .NET code to handle more complex input files, including loading TSV and Excel files more flexibly than the SSIS Flat File and Excel sources do. I wonder if this is a common experience; SSIS lets people new to ETL do clever things, but as they gain experience they find programming their own code works better.
Having said that, where you HAVE to do it RBAR, SSIS often provides efficient ways to do so!