I suspect that SqlParameter “knows” which command it’s part of, and that that information isn’t cleared when the command is disposed, but is cleared when you call command.Parameters.Clear().
Personally I think I’d avoid reusing the objects in the first place, but it’s up to you 🙂