Organizing interfaces for player movement in chess game
A player doesn't move left or right, they move a game piece 
A rook is not a player. A player has a rook (2 actually, but I digress).


When thinking about interfaces/class hierarchies it's useful to think in terms of "is a" or "has a" relationships. Bob is a player. A rook is a piece. A player has a rook. 

I would modify your interfaces a bit. 

interface IPlayer
{
    string Name { get; }
    bool MovePiece(IPiece piece, int row, int rank);
}

interface IPiece
{
    int Row { get; set; }
    int Rank { get; set; }

    bool CanMoveTo(int row, int rank);
}


You may want to consider using standard chess notation for clarity and cohesion with the problem domain, but using Cartesian coordinates will make the code simpler to write. I added a CanMoveTo method so each piece can store its own logic for checking to see if it's allowed to move to a position that the player attempts to move it to. This design may not be perfect (or even good), but should get you pointed in the right direction.