Select one record from LAG Query
It is happening because of the row being filtered before the LAG() function executes, making it unable to get the previous results.

To work around this, we could use a CTE or a subquery to execute the LAG() function before applying the filter.

Using a CTE

;WITH CTE  AS
(
SELECT
    s.StatusName, LAG(s.StatusName) OVER (ORDER BY cs.CustomerId, cs.CustomerStatusId) as PreviousStatus, cs.StatusId,cs.CustomerStatusId
FROM 
    #CustomerStatus as cs
    left join #Status as s on s.StatusId = cs.StatusId 
) 
SELECT StatusName ,PreviousStatus
FROM CTE
WHERE 
StatusId = 3 
ORDER BY
    CustomerStatusId;


Result

StatusName  PreviousStatus
Finished    Started


Rextester

With a subquery

SELECT outerquery.StatusName ,outerquery.PreviousStatus
FROM (    
    SELECT
    s.StatusName, LAG(s.StatusName) OVER (ORDER BY cs.CustomerId, cs.CustomerStatusId) as PreviousStatus, cs.StatusId,cs.CustomerStatusId
    FROM 
    #CustomerStatus as cs
    left join #Status as s on s.StatusId = cs.StatusId 
     ) as outerquery
WHERE 
outerquery.StatusId = 3 
ORDER BY
    outerquery.CustomerStatusId;


Result

StatusName  PreviousStatus
Finished    Started


Rextester

The ORDER BY CustomerStatusId; might not be needed if you only need one record