By "tracking time" do you mean that you update a table with the enter / exit times when it happens (i.e. using an ADO Command object or an Update query), or do you store it in a global variable that is "logged" later?
I have a database that does the same thing and something I've noticed is that if there's an error and the code breaks, the global variables get cleared. If you log them automatically with a Command object or SQL statement, do have error handlers in every procedure to keep the code from breaking? If your hidden form is causing an error on close (before the logging), and you do have an error handler, you could duplicate the code for updating the logout time in the handler.
Is only the logout time missing? Is it specific to one user? I've had problems with type library references where I work because not all the users have same versions on their PCs.
Can you tell us the specifics of how your database closes and how the times are logged? It might easier to see the hangup.