OK, the Drop implementation maybe an issue, because it gains mutable access to the object, while it can also acquire an immutable reference to the object, which breaks the borrow-check rule.
What if the type is a specific type that is carefully implemented that guarantees no drop reentrant and no references to Sync types can be acquired from the value?
What is the problem? !Sync prevents its reference from being sent to another thread, and it does not return borrowed values that is Sync. When the thread dies, no other thread can have references to the value of part of the value.
Even if the reference never escapes the thread you could have another thread local on the same thread hold a reference to your thread local. If then your thread local is dropped first and the other thread local access yours in its Drop implementation then you'll have a use-after-free.
I think your example implicitly borrowed &String from &MyStr, which my constraints excludes. The problem @SkiFire13 mentioned seems to be more serious.