Both FindPythonInterp and FindPythonLibs do two things, they'll set some variables (PYTHON_LIBRARIES, PYTHON_INCLUDE_DIRS) and update the cached variables (PYTHON_LIBRARY, PYTHON_INCLUDE_DIR) that are also used to specify a custom python installation.
I believe the canonical way to do this is to use the PYTHON_LIBRARIES and PYTHON_INCLUDE_DIRS variables instead of the cached ones. However, since the cached variables are accessible from the cache and GUI, this is a lot less confusing when you're trying to debug why a variable did or didn't get the value you expected. Furthermore, as far as I can tell, the implementation uses the cached variables to set their LIBRARIES/DIRS counterparts. This is also the reason this works today even though we mix-and-match.
Is there any difference between include(FindPythonInterp) and find_package(PythonInterp)? It sounds like the latter should be used, because it's more specific, but I have no idea its possible to do that..