#TI-Basic, <s>141</s> 150 bytes

<pre><code>Prompt L<sub>1</sub>
L<sub>1</sub>(1→T
L<sub>1</sub>(2→D
seq(L<sub>1</sub>(C),C,3,dim(L<sub>1</sub>→L<sub>1</sub>
If TD>0
Then
For(A,1,T
L<sub>1</sub>(1→B
For(C,2,D
L<sub>1</sub>(C→L<sub>1</sub>(C–1
End
B→L<sub>1</sub>(D
End
End
If TD&lt;0
Then
For(A,1,-T
L<sub>1</sub>(D→B
For(C,D,2,-1
L<sub>1</sub>(C–1→L<sub>1</sub>(C
End
B→L<sub>1</sub>(1
End
End
L<sub>1</sub>
</code></pre>

Edit: fixed case where depth is zero (+9 bytes)

Explanation:

<pre><code>Prompt L<sub>1</sub>                # 4 bytes, input list
L<sub>1</sub>(1→T                   # 7 bytes, turns
L<sub>1</sub>(2→D                   # 7 bytes, depth
seq(L<sub>1</sub>(C),C,3,dim(L<sub>1</sub>→L<sub>1</sub>   # 18 bytes, remove turns and depth from list
If TD>0                  # 6 bytes, if turns is positive and depth is nonzero (can't be negative)
Then                     # 2 bytes
For(A,1,T                # 7 bytes, do this 'turns' times
L<sub>1</sub>(1→B                    # 7 bytes, backup the first item
For(C,2,D                # 7 bytes, shuffle the rest along
L<sub>1</sub>(C→L<sub>1</sub>(C–1               # 12 bytes
End                      # 2 bytes
B→L<sub>1</sub>(D                   # 7 bytes, restore the backup to where it should be
End                      # 2 bytes
End                      # 2 bytes
If TD&lt;0                  # 6 bytes, if T is negative and D is nonzero
Then                     # 2 bytes
For(A,1,-T               # 8 bytes, do this -'turns' times
L<sub>1</sub>(D→B                   # 7 bytes, backup the Dth item
For(C,D,2,-1             # 10 bytes, shuffle the items the other way
L<sub>1</sub>(C–1→L<sub>1</sub>(C              # 12 bytes
End                      # 2 bytes
B→L<sub>1</sub>(1                   # 7 bytes, restore backup to where it belongs
End                      # 2 bytes
End                      # 2 bytes
L<sub>1</sub>                       # 2 bytes, implicitly return
</code></pre>