I actually haven't run into this particular problem with CDOSYS but have run into similar problems because someone forgot to destroy the sp_OA* objects that were created. Make sure that your CDOSYS proc has something like the following near the end and that it actually is being executed. It may or may not be the solution to your particular problem but I've found that a lot of people forget to do this so it's a good check to make anyway.
--===== Close the email object (helps prevent memory leaks)
EXEC @Result = dbo.sp_OADestroy @objEmailID;
IF @Result <> 0 OR @@ERROR <> 0 THEN RAISERROR('ERROR: Failed to destroy mail object on exit',16,1) WITH NOWAIT;
--Jeff Moden
Change is inevitable... Change for the better is not.