De longe, a maneira mais fácil de fazer isso (provavelmente a melhor, a menos que você esteja realmente interessado em desempenho) é ter duas cópias de seus sprites.
- A versão regular
- Uma versão "gorda", sem cor - basicamente uma versão branca do seu sprite X muitos pixels "mais gorda" que o original.
Desenhe seu objeto inteiro usando a versão "gorda" e, em seguida, desenhe a versão regular por cima.
Ao tornar a versão "gorda" branca, você pode usar o tingimento de cores interno do SpriteBatch para alterar a cor da seleção dinamicamente.
Para gerar sua versão "gorda", recomendo escrever uma extensão de pipeline de conteúdo que possa executar automaticamente os sprites originais, ler o canal alfa, criar um novo canal alfa, amostrando o canal alfa máximo na imagem original X muitos pixels ao redor de cada pixel, e configurando RGB = (1,1,1).
Você precisará garantir que todos os seus sprites tenham borda transparente suficiente para adicionar o contorno (você pode verificar isso no processador de conteúdo - e até criar espaço, se necessário).
Se você tiver apenas alguns sprites, poderá usar um bom editor de imagens (GIMP, Photoshop) e fazê-lo manualmente: canal alfa para seleção, expandir seleção, seleção para alfa, preencher canais de cores em branco.