0 0/45 * * * ?
actually means "fire every 45 minutes, starting at minute 0 of every hour".
You claim your current output is 12:00, 12:45, 13:00, 13:45, 14:30, which makes sense except for the last time of 14:30.
The job is firing at the start of the hour (12:00), fires again 45 minutes later (12:45), and then it repeats, firing the next job starting at minute 0 (13:00), followed by another trigger at 45 minutes past the hour (13:45).
I'm uncertain as to why it would suddenly start firing at 14:30, but if you change your cron input to
0 45 * * * ?
I believe it will work as you would like, firing every 45 minutes.