Thank you very much for the report.
Indeed, I was able to reproduce the problem. It usually started failing at TestMatrix_Solve080.
However, luckily I was able to find the problem: In TestMatrix you didn't pass forward the parameter epsilon to the sub-procedure TestMatrix_Solutions, but always used 1e-13 instead. Apparently that precision was not reached any more starting from about 80x80, hence the tests started to fail. I changed TestMatrix to pass on the epsilon parameter, and all tests went green.
Btw, even though the precision doesn't reach 1e-13, a test with a 1000x1000 matrix usually worked for me with precision 1e-9, and required 2145 ms on my machine (debug code, through VS->TestDriven->NUnit):
TestMatrix_NxN(1000, 1e-9);
Back to the questions:
a) At least I'm not aware of any specific. There are of course: at least one is given by the Int32 limits as we use integers to index the arrays. I would have to scan through the code base to find out the exact theoretical limits. I just tried to solve a 10000x10000 matrix but got back an out of memory exception. That would be a 200 MB array if I calculated correctly, should theoretically be possible, but apparently the .Net CLR thinks different.
b) Failures should throw exceptions. If you want to detect overflows (that normally do not throw exceptions in .Net) you may have to use the checked-keyword however. (Update: I think checked is only relevant for integers, as floating point numbers overflow to infinity anyway - but I might be wrong on this)
Btw, you mentioned that many of your values are zeros. Iridium actually once had a sparse-matrix implementation but I temporarily removed due to some integration problems (and lack of time to fix them).
Update: In case you're interested, I usually get the following times here (again with debug code):
100x100: 3 ms
200x200: 20 ms
330x330: 100 ms
1000x1000: 2200 ms