Only the hosts that pass on the Host Discovery phase (marked as discovered) will be considered for later port scanning phase. What can be confusing is that during Host Discovery you can use a simpler form of port scanning as a criteria to "discover" the hosts. But this is limited to
- -PS (TCP SYN Ping)
- -PA (TCP ACK Ping)
- -PU (UDP Ping)
- -PY (SCTP INIT Ping)
If you specify -Pn, host discovery phase is bypassed and port scanning will be done for every target IP address.
Probably what is happening is when you perform a regular scan, nmap is not marking the IP address as discovered because it fails the host discovery tests, so is not considered for later port scan phase.
You can read more about it here