My best guess is that you're setting the LPTMR_CSR[TFC] bit which causes the counter to continue counting until it overflows back to zero, instead of resetting back to zero on the initial comparison. If you're literally not changing anything but the clock source, that would definitely explain it. Because the MCGIRCLK is so much faster, it'll cause the LPTMR counter to overflow quickly. The LPO will take a very long time as it's significantly slower.
Check out the LPTMR code in the KL26 sample code for an example of using the LPO clock for setting up a millisecond timer: \klxx-sc-baremetal\src\drivers\lptmr
/* Make sure the clock to the LPTMR is enabled */
SIM_SCGC5|=SIM_SCGC5_LPTMR_MASK;
/* Reset LPTMR settings */
LPTMR0_CSR=0;
/* Set the compare value to the number of ms to delay */
LPTMR0_CMR = count_val;
/* Set up LPTMR to use 1kHz LPO with no prescaler as its clock source */
LPTMR0_PSR = LPTMR_PSR_PCS(1)|LPTMR_PSR_PBYP_MASK;
/* Start the timer */
LPTMR0_CSR |= LPTMR_CSR_TEN_MASK;
/* Wait for counter to reach compare value */
while (!(LPTMR0_CSR & LPTMR_CSR_TCF_MASK));
/* Disable counter and Clear Timer Compare Flag */
LPTMR0_CSR &= ~LPTMR_CSR_TEN_MASK;