Is there an upper limit to the SqlDbType.Structured ADO.NET type?
There is no inherent limit to the size of a table-valued parameter.  However, you could run into client memory constraints if you pass the value without streaming, such as using a DataTable or IEnumerable&lt;SqlDataRecord&gt; (without a stream source implementation) instead of a DataReader.

On the server side, the limit is tempdb storage.

2K rows won't be a problem as I've passed millions of rows without issues. One consideration, though, is to be sure to specify the MaxLength for string columns with a DataTable value. See my blog post SQL Server TVP Performance Gotchas.