adamw was correct, FacesContext.getCurrentInstance() does work in a custom RevisionListener.
We had a javax.servlet.Filter implementation attempting to handle the transaction in the doFilter() method which was for whatever reason causing FacesContext.getCurrentInstance() to return null in the RevisionListener. We removed that from the web.xml yesterday for a different reason and when I tried getCurrentInstance() without it this morning, everything works fine.
Thanks for the replies everyone, maybe this will help someone else someday.