I'd suspect that it's working every time: it certainly does for me, and I'd be surprised if a bug like that had gone unnoticed for so many years.
I suspect that it just isn't doing what you expect because it's not monitoring the same checkbox as causes the event to fire. Try changing it to use the actual CheckBox and see what happens:
private void checkPOD_CheckedChanged(object sender, EventArgs e)
{
CheckBox cb = sender as CheckBox;
if (cb != null)
{
if (cb.Checked)
{
txtPOD1.ReadOnly = false;
}
else
{
txtPOD1.Clear();
txtPOD1.ReadOnly = true;
}
}
}