Performance differences between executing via Linked Server vs. SSMS
The difference between SSMS and .Net client performance could well be down to how plans are cached. Part of the cache key is the session options - for me, at least, SSMS sets ARITHABORT, whereas .Net SqlClient does not, by default.  You sound like you're ending up in the situation where a bad plan is cached vs. one cache key, and a good plan vs. another.