Reprojecting is not the way. You need to create a rasterio dataset. You can create an in-memory dataset using a rasterio.MemoryFile using the georeferencing from your original dataset.
Assuming you have not clipped or resampled your numpy array, here is a method to generate an in-memory dataset:
from contextlib import contextmanager
# use ...
This Page seems to have the answer you are looking for. You need to use rasterio.warp.calculate_default_transform()
Create your raster in EPSG:4326 as you have already done
reproject according to the method in the link (just tested it - it works)
from rasterio.warp import calculate_default_transform, reproject, Resampling
filename = 'my_4326_file.tif'
Here's an approach for arbitrary reclassification of integer rasters that avoids using a million calls to np.where. Rasterio bits taken from @Aaron's answer:
import numpy as np
# Build a "lookup array" where the index is the original value and the value
# is the reclassified value. Setting all of the reclassified values is cheap