One private key generate many public keys? I created wallet in BitPay. I have public and private keys.

Then I created wallet in Electrum using existing private key.

Now wallet in electrum has other public key than in BitPay but
the same private key.

Is it ok? Addresses generated in one application can be visible 
in second one? Where can I read about rules of generation keys and
addresses described in simple words?

I generated wallet in electrum using the same private key second time
and i obtained the same public key like last time I generated on electrum, but not the same like in BitPay wallet. I do not understand why.
One private key can generate two different bitcoin addresses. That depends on the ECDSA logic and encoding schemes used. Probably you have heard about compressed and uncompressed keys. The details are deep under the hood, and requires some reading, e.g. Andreas book "Mastering Bitcoin" (2nd edition), which is online available. Chapter 4 and 5 are the relevant ones. 

I am not sure, how bitpay creates his keys, but I have already imported privkeys into Electrum as well. As long as I was working with compressed keys in my source wallet, Electrum showed the same. However, this gets different, when you extract keys from bip39/44 wallets. From looking at their website, I think bitpay has only a function to extract an extended private key, that is for sure different from a "std private key". An extended private key is used in HD wallets, to generate a set of xpub keys, that can be used e.g. on websites, to avoid re-use of keys. And depending how the seed is implemented, wallets are not always compatible to each other. This might be the case, why you see different addresses. Electrum uses [m/44'/0'/a'] as xpriv path for derivation. But maybe there is a way, look for samuelt33's comment on 5 Aug 2017 on the webpage here. 

On standard privkeys and pubkeys, there is a longer thread here: How are compressed PubKeys generated?