BalancE the UppercasE Oh, No!
the sentences are out of balance.
Quick! balance them.

A word is defined as follows:

A sequence of letters [A-Za-z] separated by any non-letter character ([0-9] ~+- etc.)

A word is BaLanCeD if its capitalization is the same forwards as it is backwards.
Given a sentence with words, balance each word by capitalizing a letter on the right-hand side for each uppercase letter on the left-hand side, and the other way around. Do not make uppercase letters lowercase.
Rules

For each letter n chars from the beginning of a word, it and the letter n chars from the end of the word should both be made uppercase if either of them is upper case.
All input will be printable ASCII (codepoints 32   to 126 ~).

No need to balance if:

The capital is in the middle of a term (word) (equal amount of letters on each side)
No capitals are present in the term

Example:
eeeeE → EeeeE  
eEeee → eEeEe
eeEee → eeEee
Eeee. → EeeE.
{EEee}1EEeEEEeeeeee → {EEEE}1EEeEEEEEEeEE

TesT CaSeS:
It was the first new century. →
IT was the first new century.

IiIIiiIIiiiI Ii iI iiiI iiii iIi. →
IiIIIIIIIIiI II II IiiI iiii iIi.

I sueD the airport for misplacing my Luggage. – I lost my Case. →
I SueD the airport for misplacing my LuggagE. – I lost my CasE.


The Policemen  CraCked THE CaSE of the lost cocaIne. →
ThE PolicemeN  CraCkeD THE CASE of the lost coCaIne.

JUST IN CASE. →
JUST IN CASE.

If(!1){ /\hElloBinOLIngo}elsE{ print( 'bOn aPPetit')} →
IF(!1){ /\hElLOBinOLInGo}ElsE{ print( 'bOn aPPeTIt')}

xK/TH&quot;E7k['VyO%t&gt;2`&amp;{B9X.8^$GWc=!+@ 3Us}]JFM)jbuI,-:alPw*Qvpq5zi\Z(_n1dC~?&lt;;fDAm0SR|eYg6#rN4Lho →
XK/TH&quot;E7k['VyO%t&gt;2`&amp;{B9X.8^$GWC=!+@ 3US}]JFM)JbuI,-:aLPw*QvpQ5zi\Z(_n1DC~?&lt;;fDAm0SR|eYg6#RN4LhO

Foo_bar →
FoO_bar

(the &quot; →&quot; will not be included in the input)
This is codegolf, so attempt to achieve least amount of bytes
JavaScript (Node.js),  76  72 bytes
Saved 2 bytes thanks to @tsh

s=&gt;s.replace(/[a-z]+/gi,w=&gt;Buffer(w).map((c,i,a)=&gt;c&amp;=a[w.length+~i]|95))

Try it online!
Commented
s =&gt;                     // s = input string
s.replace(               // replace in s:
  /[a-z]+/gi,            //   match all words in a case-insensitive way
  w =&gt;                   //   for each word w:
    Buffer(w)            //     turn it into a Buffer
    .map((c, i, a) =&gt;    //     for each character c at position i in this array a[]:
      c &amp;=               //       bitwise AND of c with:
        a[w.length + ~i] //         the counterpart character taken from the end of
                         //         the word
        | 95             //         OR 0b1011111
                         ///        (all letter bits except the lowercase bit)
    )                    //     end of map()
                         //     implicit coercion of the Buffer to a string
)                        // end of replace()