Your problem stems from the fact that sprocs don't provide a "contract" of what they are going to output, unlike views and functions. What you really need is the sproc to return the structure that it will eventually output.
There are a couple methods to "trick" SSIS into using a sproc.
One is to add something like:
SELECT Field1 = CONVERT( int, 0 ),
Field2 = CONVERT( varchar(30), '' ),
Field3 = CONVERT( tinyint, 0 )
WHERE 1=0
What this does is always return a table with no rows with the correct structure, BUT must EXACTLY match what will eventually be output by the sproc. I find this method a little disconcerting because it returns two outputs but that is me..
CEWII