I do not understand when will the core layer is needed. All the materials that I have read in general say that core layer should switch traffic quickly and no filtering. None say when or in what situations the core layer is implemented.
For smaller deployments a Collapsed Core is usually fine. Collapsed Core means that some devices perform both Distribution and Core layer duties.
With just a few Access switches there's no need to build a large Core.
If you have a large network then you will have many Access switches. Let's say that you have 20 Distribution switches. Connecting all the Distribution switches would be a huge waste of ports and fiber and you would also need a lot of routing peerings. For everytime you add a new Distribution switch there would be a lot of work connecting it to the others and putting in new routing statements.
For those situations it makes sense to use a Core, you would then only add maybe two connections from each Distribution switch to the Core. The number of peerings on the Distribution layer switches would be a lot less as well.
The main factor is scalability but other things could affect as well like speeds and feeds, the distance your network is covering, external connections and factors like that.
Totally agree with Daniel Dib's response towards scalability and other good points.
One of the main issues we experienced towards implementing a layered access ->distribution/core solution is spanning-tree.
Lets say you implement an access-> distribution/core solution and you have many buildings/floors/departments with many access switches. What we have seen is when someone introduces (accidentally) a spanning-tree loop the cpu on your core goes through the roof (nearly). ALL of the users cannot use their computers, internet, file servers, etc... and the whole infrastructure suffers.
To alleviate this issue, I would recommend to implement an access/distribution -> core solution for your zones/buildings. Keep your vlans and the spanning-tree root roles for these vlans on the distribution switches.
Lets say you have 4 distribution switches connected to your core(s) and a routing protocol taking care of your internal routing between the distribution and the core switches, should one of the distribution switches suffer from a spanning tree loop, only that zone is affected and your other three zones/buildings continue to function unaffected.
That makes troubleshooting somewhat easier :-)