Sospecho que SqlParameter "sabe" de qué comando forma parte y que esa información no se borra cuando se desecha el comando, pero es se borra cuando llamas a command.Parameters.Clear() .
Personalmente, creo que evitaría reutilizar los objetos en primer lugar, pero depende de ti :)