Yes, the automatic detection is done through MKL and a very common reason for an unexpected result is having an environment variable override (such as OMP_NUM_THREADS or MKL_NUM_THREADS).
If that does not resolve the issue, you may define $ProcessorCount in any desired way, for example
Unprotect[$ProcessorCount];
$ProcessorCount = 256;
Protect[$ProcessorCount];
in initialization code like init.m. The value does not have any impact on parallel computation except for deciding how many parallel kernels to launch by default via LaunchKernels[].
Other important parameters would be "ParallelThreadNumber" and "MKLThreadNumber" in SystemOptions["ParallelOptions"], which again can be set to any desired values.