From your description, I assume it's loss of precision from evaluating the boundary conditions to be used as initial conditions for the next stage. This loss comes from an estimate of the maximum roundoff error propagated through the computation. It is an estimated bound, not the actual error.
Setting $MinPrecision and $MaxPrecision should suppress the message. If your BCs are numerically ill-conditioned, it won't help that; it will probably hide it (caveat).
Block[{$MinPrecision = 50, $MaxPrecision = 50}, BCs /. currentstate]
(There seem to be two, distinct kinds of precision being discussed, namely, the floating-point precision of the numbers used by the kernel and the precision (or accuracy) of the solution. Whenever I do what is described, the solution at the end of a stage always has a floating-point precision of 50, no matter what the precision of the solution happens to be. In fact, NDSolve[] cannot know the precision of the solution. It knows only the format of the numbers (50-digit bignums) in its argument. So NDSolve[] is not complaining about the solution being inaccurate. It's complaining about some of the numbers having a bignum format of less than 50 digits.)