To answer your first question, FPKM is already normalized in the sense that you've already divided by the total library size (and also by transcript length). Whether that's a good way of normalizing your reads is questionable. If you are comparing among cell lines, you really don't need to divide by transcript length as it is a technical bias that should be consistent in all your samples.
Other popular options would be to normalize your reads with DESeq's method or EdgeR's TMM method. Here is a good paper that describes several normalization methods: http://bib.oxfordjournals.org/content/early/2012/09/15/bib.bbs046.full
Converting your normalized expression value to z-socre can be useful if you want to generate a nice heatmap or perform cluster analysis. However, you will lose information on the magnitude of gene expression with z-score. A gene going from 100 reads to 500 reads will have the same z-score as a gene going from 1000 reads to 5000 reads. Another option is to use variance stabilization method from the DESeq package.