Rotate every 2x2 block in a matrix
CJam (42 40 bytes)

{(\@2$,(/.{@a@a+z(\@.{4,={+2/zW%~}*}z~}}


Online demo

Basically this applies the same technique twice in order to fold the block

{4,={+2/zW%~}*}


which operates on a 2x2 matrix and a number of times to rotate.

[first row] [[second row] [third row] ... [last row]] [value_0 value_1 ... value_n]


can be processed with

.{block}


and has the effect of

[first row]
[second row] value_0 {block}~
[third row] value_1 {block}~
...


because . (like % in CJam) doesn't gather the results into an array until it's finished.