In cellular Internet-of-Things (IoT) systems, system overload may occur during a random access (RA) procedure under a limited number of preamble resources and physical uplink shared channel (PUSCH) resources especially when there exist massive IoT devices in a cell. In order to resolve the system overload, the commercial system like 3GPP LTE adopted a group paging (GP)-based uplink access technique, but it has been known that the performance of the GP-based technique drastically degrades as the number of devices increases. In this paper, we first propose a dynamic access control (DAC) mechanism for the GP-based cellular massive IoT system, which dynamically adjusts RA-attempting probability by considering not only the number of available preambles but also the number of available PUSCH resources. We also intelligently combine the proposed DAC mechanism with an early preamble collision detection technique to further improve the RA performance of the cellular IoT system. Through extensive computer simulations, we show that the proposed DAC mechanism outperforms the conventional access control mechanisms, which consider only the number of available preamble resources, in terms of GP completion time, PUSCH resource efficiency, transmission efficiency, and energy efficiency.