private bool DoesImmobileCaptureResolveOrPreventCheck(List <PieceEV> towerPieces, int tierIndex, IEntitiesDB entitiesDB)
        {
            bool returnValue = false;
            PreviousTowerState previousState = CreatePreviousState(towerPieces);
            TurnEV             currentTurn   = turnService.GetCurrentTurnEV(entitiesDB);
            PieceEV            commander     = pieceFindService.FindCommander(currentTurn.TurnPlayer.PlayerColor, entitiesDB);

            PieceEV?capturedPiece = TempImmobileCapture(
                towerPieces, tierIndex, currentTurn.TurnPlayer.PlayerColor, entitiesDB);

            // Betrayal did not cause two file move violation
            if (capturedPiece.HasValue)
            {
                returnValue = !checkService.IsCommanderInCheck(currentTurn.TurnPlayer.PlayerColor, entitiesDB);

                if (!returnValue && checkService.IsForcedRearrangementPossible(capturedPiece.Value))
                {
                    returnValue = DoesForcedRearrangementResolveOrPreventCheck(capturedPiece.Value, commander, towerPieces, entitiesDB);
                }
            }

            RestorePreviousState(previousState, entitiesDB);
            return(returnValue);
        }