Next time it happens, can you try running heap(1) against it? It might help point out where that memory is going.
I ran heap(1) on WindowServer [1] but there's nothing in there standing out so maybe this is a red herring.
[1] https://gist.github.com/772687dba65a35cca8cd707fcfda99c0