As a rule of thumb, if you want to have common type but different behavior for a thing - here a Move - you need to let the thing implement the behavior. So instead of asking how the board can interpret two different moves differently, you should consider how to have two different moves use the board differently when performing their move.
So: The base class (should probably be interface) is a Move, it has a perform() method, and the two kinds of moves have different implementations of the perform() method.