Thanks again to @vinoski for helping clean up the build process.
h/t @vinoski for tracking down the is_file() bug when checking for the redis socket file, and for noting that I was missing a couple necessary backend API functions.
Reorganized how Redis install and run status are checked.  The socket and pid file end up in the right place.  But they don't exist fast enough.  It doesn't appear that erlang:open_port blocks waiting for the executable, so Erlang execution is continuing and hierdis then tries to hierdis:connect_unix to a socket that doesn't exist.