Let's first discuss a bit more on the difference between command-related errors and column / data related errors. Some errors can occur if the command used has invalid syntax or if it uses a bad object name. The input data processed by the command transform does not contribute to those errors. In those cases, more often then not, users want to correct their command instead of looking for bad data and so, the command transform just fails execution instead of redirecting rows (if it redirected, it will end up redirecting all the rows since the command will always fail regardless of the data). For those errors, OLE DB providers can return generic errors such as DB_E_ERRORSINCOMMAND to the Command transform. Column / data errors can occur when the data in the columns cause the error, such as an invalid data conversion when inserting a badly formatted string into a date column or a value that violates an integrity constraint. For those errors, users do want the rows redirected. OLE DB providers usually return more specific errors (e.g. DB_E_INTEGRITYVIOLATION) along with which column contains the data that caused the problem.
So, one example is if a stored proc was written to catch all errors, including integrity violations that might have cause the OLE DB provider to return a DB_E_INTEGRITYVIOLATION to the Command transform, and in its exception handling, raises a generic error that the provider ends up returning as DB_E_ERRORSINCOMMAND to the transform. The row redirection would not be triggered. Depending on the database and its OLE DB provider, it might not be possible to produce an error that will cause the OLE DB command to redirect. For example, if the OLE DB provider is written to always return DB_E_ERRORSINCOMMAND regardless of what the actual error was reported by the database.
Since we've shipped the command transform, we have seen cases where command-related errors are being returned for data related errors, causing row redirection to not occur. So, for the next version of Integration Services, we've made the Command transform more accommodating by having it look at DB_E_ERRORSINCOMMAND and try to redirect if possible.
Hope this clears things up a little bit more.