If there are too many transactions in the mempool to be included in a single block, and assuming they all have the same transaction fee per kB, will the older transactions be mined first?
As you said, the primary sorting criterion is fee/byte. The secondary sorting priority is transaction age in the monerod source. Of course, any code creating a block is free to make its own selection/priority choices, so this only applies to monerod.
It's up to the miner which transactions will be chosen to be included in a block, so a miner might optimise his selection to fill as much as possible of the available block size limit.