Implementing application locks within SQL Server (Distributed Locking Pattern)
Do I need to make the "unlock" SERIALIZABLE as well?


Despite the name, the serializable isolation level does not guarantee transactions will be executed sequentially, or in the order received. Rather, serializable guarantees transactions will have the same persistent effects on the database as if they had executed sequentially, in some undefined order (see the link for more details).


  Are there any other approaches that I could use/anything that I have forgotten?


Yes. SQL Server already provides support for arbitrary application locks via:


sp_getapplock
sp_releaseapplock
APPLOCK_MODE
APPLOCK_TEST


These built-in applock features provide a broad range of options, and include automatic deadlock detection (though any transaction rollback required is the programmer's responsibility). For example, you can choose from transaction- and session-scoped locking, in a variety of modes. Using these features to implement the behaviour you need should be quite straightforward, and certainly simpler than building your own resilient and reliable lock manager from scratch.