Swing: cria os próprios widgets (botoes, icones, textboxes, etc, etc, etc), desenhando-os na tela com Java2D ou o que for.
SWT: usa o sistema operacional pra desenhar os widgets, mas quando o SO não sabe de algum determinado controle (árvore, por exemplo), ele faz na mão.
Modelo de eventos: diferente
API: totalmente diferente
Portabilidade: na SWT, a portabilidade depende de ter uma SWT disponível para a plataforma onde se quer trabalhar, o que não é o caso da Swing, que está disponível pra todas as JREs que tem AWT (ou seja, todas). Mas, agora que a SWT está ficando mais estável no OS X, portabilidade deixou de ser problema, na prática 