Locking and checkout mechanism
You can combine the select and update into a single statement that runs atomically, by doing something like:

CREATE TABLE dbo.Clients
(
    ClientID INT NOT NULL
        CONSTRAINT PK_Clients
        PRIMARY KEY CLUSTERED
        IDENTITY(1,1)
    , ClientState VARCHAR(255)
);

CREATE TABLE dbo.CallCheckout
(
    ClientID INT NOT NULL
    , CheckedOutAt DATETIME
);

INSERT INTO dbo.Clients(ClientState)
VALUES ('AA')
    , ('AB')
    , ('AC');

INSERT INTO dbo.CallCheckout (ClientId, CheckedOutAt)
VALUES (1, NULL);

INSERT INTO dbo.CallCheckout (ClientId, CheckedOutAt)
VALUES (2, GETDATE());

INSERT INTO dbo.CallCheckout (ClientId, CheckedOutAt)
VALUES (3, NULL);
GO

CREATE PROCEDURE dbo.CheckOut
(
    @state VARCHAR(3)
)
AS
BEGIN
    UPDATE TOP(1) dbo.CallCheckout
    SET CheckedOutAt = getdate()
    OUTPUT inserted.clientid
    FROM dbo.CallCheckout cc
        INNER JOIN dbo.Clients c ON cc.ClientID = c.ClientID
    WHERE cc.CheckedOutAt IS NULL 
        AND c.ClientState = @state;
END
GO

EXEC dbo.CheckOut 'AA';
EXEC dbo.CheckOut 'AC';


The results are:



Notice, I've specified the schema in the CREATE PROCEDURE and UPDATE statements.  You should always specify the schema, even if you only ever use dbo, since it prevents the server from having to make that decision, and potentially making the wrong decision.

Also, please do not use reserved keywords for column names.  I'm talking about [state].  Notice, I've named that column CheckoutState which is not a reserved keyword, and makes the column name more meaningful.