It's possible this Unlock() is safe right now, but it's not generically safe — you could reach the end of the list, but then have somebody push data on the back while you've dropped the lock. Is that dealt with correctly?
In general unlocking for a memory copy is risky and adds a lot of constraints on how the data structures are used, and while I haven't finished looking at uses here I'd be surprised if it gets us anything important. What's your reasoning here?