It sounds like the date is not what you think it is! Try:
declare @mySmallDate smalldatetime
set @mySmallDate = '20030721'
select @mySmallDate
That should work just fine. If you try a date which is outside of the range for smalldatetime (roughly the year 1900 to 2079), such as:
declare @mySmallDate smalldatetime
set @mySmallDate = '20990721'
select @mySmallDate
you replicate the error you are getting. Double-check the date which is being used for the insert (try using Profiler to see exactly what is going on).
If you want to store dates with a bigger range, use the standard "datetime" datatype.