I think the primary usage case for something like that would be shifting a multi-byte quantity left or right by four bits. One could rotate a 56-bit value (e.g. the mantissa of a floating-point value) left by 4 bits by doing something like:
ld h,myThing >> 8 ; Assume it doesn't cross a page boundary
ld bc,4
and a ; Clear carry
loop:
ld l,myThing & 255
rl (hl)
inc l
rl (hl)
inc l
rl (hl)
inc l
rl (hl)
inc l
rl (hl)
inc l
rl (hl)
inc l
rl (hl)
djnz loop
but it could be done much faster as:
ld h,myThing >> 8 ; Assume it doesn't cross a page boundary
xor a ; Could use "ld a,0" if carry was important for some reason
ld l,myThing & 255
rld (hl)
inc l
rld (hl)
inc l
rld (hl)
inc l
rld (hl)
inc l
rld (hl)
inc l
rld (hl)
inc l
rld (hl)
I'm not sure the value of that is greater than the value of other features that could have been provided for the same amount of effort and silicon(*), but I think something like the above would be the intended usage pattern. Still, the feature would have value either in cases where things are being shifted by exactly four bits, or in performance-sensitive code (like floating-point math) where values may need to be shifted by N bits and it would not be uncommon for N to be 3, 4, or 5. I'm not sure exactly how big the thing to be shifted would need to be to make such optimizations worthwhile, but the requirement that objects be stored in RAM might limit the value of such optimizations when shifting smaller things. If a 32-bit value needed to be shifted, the first approach could be changed to:
ld hl,(myThing)
ld de,(myThing+2)
ld bc,4
and a ; Clear carry
loop:
add hl,hl
rl e
rl d
djnz loop
ld (myThing),hl
ld (myThing+2),de
greatly reducing the cost of the loop. The fact that the rld form doesn't
need the loop would likely make it more efficient than running
the loop four times, but if "rld" had allowed code to specify a register rather than (HL) it could have been much more useful in the small-objects case.
(*) Since writing the above, I've discovered that the Z80 uses a 4-bit ALU, and has steering logic to load/store its value from/two the upper or lower half of either half of any 16-bit register pair, including the temporary register, which would suggest the amount of circuitry required for these instructions is probably less than I would have expected. This likely contributes to their inclusion in the instruction set.