Вы уверены, что есть утечка памяти? Или вы замечаете, что ваша память только растет?
Пока сборщик мусора не очистит все созданные вами потоки, память будет расти, но она не протекает, сборщик мусора знает, что это мертвая память.
Единственный способ «утечки» памяти в управляемой среде, такой как .NET или Java, - это когда у вас есть ссылки на объекты, которые никогда не используются или не нужны. Это не тот случай, здесь. Вы просто создаете кучу потоков и сразу же забываете о них. Как только на них больше не ссылается RefreshTimer_Elapsed и поток перестает работать, тогда больше нет ссылок, и они свободны для очистки.
Вы не увидите падение памяти, пока сборщик мусора не будет готов выполнить очистку. Вы можете попытаться форсировать это, но это не рекомендуется для повышения производительности.