I've inherited unsafe C#, but haven't ever needed to write any myself. I have done a very tiny bit of C, called from C#, to interface with bespoke hardware that would have been otherwise difficult to control from a non-hard-realtime OS.
Most of the rest was to wrap calls around the Win32 API, and, ironically, I found that the managed framework was quite capable of similar functionality via safe, managed code.
Also, a lot of that old code did things like using ints rather than IntPtrs, or otherwise assuming a 32 bit word size, which caused it to gradually rot over the past couple decades. So over time it's tended to be replaced anyway, and, along with it, most of the "Heisenbugs" caused by crapping all over somebody else's memory.