It's going to very hard, almost impossible, to do that in a simple way.
If you just wanted to protect the key, it would be easy: just put the key inside a device that is tamper-resistant like any token or smartcard. In a smartcard, someone can perform computation inside it, but can't access the code, or a stored key, etc.
Your problem is a bit deeper than that: given a computer that is outside your control (client environment), no matter how long it is turned off, etc, you want to be sure that when it tries to connect to your server, it hasn't been changed / messed in any way.
And to that there's no fully possible way to guarantee that. It's the third rule:
Law #3: If a bad guy has unrestricted physical access to your computer, it's
not your computer anymore
(source: http://technet.microsoft.com/en-us/library/cc722487.aspx)
Specially if your computer can be turned off as a regular use.
Think that someone could try jamming the GPS signal, or opne your case and remove any special hardware you put, or try to change the OS of your computer, or put a device between the computer and the keyboard, or remove your HD and copy everything, or...
If you just want to protect some key, go with tokens or smartcards. But that wouldn't prevent someone from accessing it the same way your original software would do.
If you want to protect the client module from being stolen, put some armed guys at its side. Or tell us more about exactly you want to protect, so we can elaborate a bit more.