Should a locked query increment its CPU and IO counts? When I create a test case in a session #1:

create table ##t (a int)
begin tran
insert into ##t select 1


and in another session #2 run

select * from ##t


and yet in another session run

sp_who2 active


then no CPU and IO counters are increasing on the blocked session #2. This makes sense, but is this always the case for a blocked statement?
The answer here is "it depends" - While actually blocked? A session should not use any resources. It is in a state basically saying "I sure would like to do my work, hey SQL Server may I have a lock on such and such a resource"  so while that resource is locked - the session is basically not able to do anything except wait for resource availability. Once that has been cleared it can then start running or join the runnable queue waiting for its scheduler time.

Now you could still see IO and CPU increasing on a session with many queries or steps that is blocked in different spots. So you could look and see it is currently blocked, but see the CPU increased or IO - that would be because it got past a block did some work for a statement but was then blocked again.

I'll often diagnose blocking with a tool that shows query duration and CPU/IO metrics for a session but maybe missed tracking blocks if an execution of a query is higher than normal duration wise but remains within its normal limits for CPU and IO. It isn't only blocking that will present that way but it often is - so it becomes a tool to say "hey let's look and see if we see any blocking".

I might also suggest you have a look at sp_whoisactive. A great script which will be much more informative than SP_Who2.