Para não reinventar a roda, se você estiver usando o Apache Commons Lang, veja ExceptionUtils.getRootCause().
Vale a pena incluir uma biblioteca só para isso? Talvez não. Mas se você já o tem em seu classpath, ele está lá para você e observe que ele faz algumas coisas que uma implementação 'ingênua' pode não fazer (por exemplo, lidar com ciclos na cadeia de causas ... ugh!)