Lieutenant Colonel Ariel Caculitan said the attack began as troops moved into an MILF camp.
The bodies of at least 10 soldiers had been beheaded, Caculitan said, including those of six marines earlier reported missing.
The troops were attacked while checking on reports that Giancarlo Bossi, 57, the missionary from Milan, had been spotted with his kidnappers in the region.
Bossi, of the Pontifical Institute for Foreign Missions, was seized by heavily-armed men near his parish church in the southern Zamboanga peninsula on June 10.
The government had earlier suggested that either the Abu Sayyaf rebels or renegades from the MILF had abducted Bossi, but the MILF has denied any involvement and initially helped in the hunt for Bossi's captors.
Eid Kabalu, a spokesman for the 12,000-strong MILF, confirmed the gunfight but ruled out any involvement of the Abu Sayyaf, a group with alleged connections to al-Qaeda.
Instead, he accused government troops of violating a ceasefire by knowingly entering MILF territory.
"The firefight was touched off because they entered our area without first coordinating with the MILF leadership as agreed upon in the peace talks," Kabalu told AFP by telephone from southern Philippines.
"This is their fault because they intruded into our territory and our forces were alarmed and had to defend their positions."
Mohagher Iqbal, the MILF's chief negotiator engaged in peace talks with the government, denied his men were involved in the beheadings, and promised to investigate the incident.
"It cannot be a mistaken encounter because it was a deliberate act on the part of the marines that entered the area, knowing that the area is a bailiwick of the MILF, in complete violation of the ceasefire," he said.
The ceasefire committee comprising government and MILF representatives is scheduled to travel to Basilan on Thursday.