Is there any reason why adding a nolock to a query would cause it to increase execution time?
UPDATE TargetTable
SET col1 = c1.RowCnt,
col2 = c2.RowCnt
from TargetTable tt
join
(
select col3, RowCnt = NULLIF(COUNT(*),0) from Table2 (nolock)
group by col3
) c1 on c1.col3 = tt.ID
join
(
select col4, RowCnt = NULLIF(COUNT(*),0) from Table2 (nolock)
group by col4
) c2 on c2.col4 = tt.ID
WHERE timestamp BETWEEN @FromDate AND @ToDate
AND (tt.Client_ID = @Client_ID)
NOLOCK hint allows Allocation Order Scans. As such, they may create a completely different execution plan, one expected to be faster but that it turns out to be slower (eg. wrong cardinality estimates due to stale stats). As with any performance pro0blem, use an investigation methodology to find the cause of the problem. Waits and Queues is an excellent such methodology.