Terminal vs. window-system color handling is wrong
The logic of checking window-system while defining the theme is incorrect: window-system can have a different value in different frames, so if you start a GUI emacs and load the theme, it will see window-system as true, but a terminal emacsclient will see window-system as nil, and the theme definition will already have been frozen.
In fact, Emacs provides a mechanism for defining faces which depend on the displaying terminal, namely the class parameter (currently hard-coded to t everywhere). You should simply define the faces using custom-theme-set-faces, such that each face has two color definitions for frames with different classes: use the 256-color palette with a (min-colors 89) class and the graphic terminal colors with a (min-colors 257) class. In this way, you could define a theme which Just Works everywhere.
I'm providing this feedback not because I feel like nitpicking, but because I like this theme, so I have a vested interest in it working as well as possible. :-)
P.S. Fixing this might well resolve #3.