<p>Is there any provable reason why I should always specify the SQL data type for SqlCommand paramenters?</p>

The only time I've run into a case when I had to specify a data type was when passing in DBNull.  When I wasn't specifying a data type, it defaulted to a Varchar, and ended up crashing because I was trying to set an integer value to Null.