Basically, it means that your SendFc16 method is continually returning false.
And the simplest reason why that might happen is that the serial port is not open. It may not be that - it could be any of the other errors you report - but that's where I'd start. Use the debugger, and follow the code through to find out why it is returning false.
And instead of just continual retries, limit the number to a "sensible" amount: 3, 5, or 10 perhaps:
try
{
int retries = 3;
while (!mb.SendFc16(address, start, (ushort)1, value))
{
if (--retries == 0) break;
}
}