I before E, except after C
JavaScript (ES6), 338 bytes
A regex-based solution. This can probably be optimized some more.
Returns 0 (not flipped) or 1 (flipped).
w=&gt;/dief|egh|etei|it?ei/.test(w)|/^(a?th0[rs]|d0st|r?0|h0r?[1s]|w0r)|b0[gt]|c0(l|t[es1]|v)|cl01|d0(f|n[1es]|ra|tie|ty)|0([aijop]|c1|[df]o|g[hln]|na?[fgor]|rlo|[rs]u|s[ahims]|tf|tm)|f0n?[at]|g0g|h0(fe|k|n|re)|ip01|k0n|n0t|no?th0|o0s|r0n1|rel01|rg0st|s0(l|ne|z)|t0n[es1]|u0n|un01|v0(l|n[1es])|yth0/.test(w.replace(/ei|ie/,0)+1)^/ei/.test(w)

Try it online!
(The total number of errors is reported in the Debug section of TIO, so you can collapse the Footer and Output sections if you just want to see that.)
How?
We first get rid of a few edge cases with the following regular expression:
/dief|egh|etei|it?ei/

which matches these flipped inputs (for which it's especially hard to tell that they are indeed flipped):
diefeid, diefeis, ieghteis, ieghteith, inhomogenieteis, pompiei, soceiteis,
wieghteir, wieghteist

Otherwise, we replace the first occurrence of either ei or ie in the input word with 0 and append a trailing 1:
w.replace(/ei|ie/, 0) + 1

We test whether the resulting string is matched by a large regular expression consisting of 23 patterns which are associated to words for which 0 must be ei.
Examples:

ath0stically1 is matched by ^(a?th0[rs]|d0st|r?0|h0r?[1s]|w0r)
rec0ved1 is matched by c0(l|t[1es]|v)
mad0ra1 is matched by d0(f|n[1ens]|ra|tie|ty)
ineffic0ncy1 is not matched by any expression