session_register() is not deprecated. Though a warning is given regarding its use. (See php.net). When register_globals is turned on, it becomes really easy to store something nasty in your session with something like:
session_register('automatically_created_variable');
... because this variable can contain pretty much anything - including malicious code. If you're using $_POST, or $HTTP_POST_VARS (which is deprecated), then even if register_globals is on, you're not relying on it, so it may as well not be. Even so, you should check what is in those variables against a list of permitted values (ie., letters only) before you register them.
I suspect that your problem is that you're re-registering the value on the third page: you said it had identical code. If you register it on the second one, but don't resubmit the value, and then register it again, then it will registered with an empty string or null value.
//page two
//This registers your variable successfully (right?)
session_start();
$chemicalSession = $HTTP_POST_VARS['chemical_drop_down'];
session_register("chemicalSession");
//page three
session_start();
$chemicalSession = $HTTP_POST_VARS['chemical_drop_down'];
session_register("chemicalSession");
//OOPS! Just overwrote the registered value with a blank string ('')!
//Value wasn't submitted to the third page via POST
//page three should be:
session_start();
//... now do your stuff.