Let's double check that the color of Jupiter will be visible over a large range of distances. (tl;dr it will!)
I calculated the relative brightness of Jupiter normalized to 5.2 AU the average distance from Earth assuming 100% illumination, and then the relative surface brightness.
This assumes the eye remains dark-adapted.
Anywhere beyond roughly 1.5 AU, Jupiter is unresolved by our eye (assuming a nominal 1 arcminute resolution) so the apparent surface brightness increases as we move closer to Jupiter, until we can start resolving the disk. After that the apparent surface brightness (intensity per unit solid area) doesn't increase, for the same reason that a wall does not get brighter as we walk closer to it.
So as we move from 6.2 AU to about 1.5 AU Jupiter's apparent surface brightness will only increase, and after that it remains roughly constant. So I propose to agree with several other answers that the colors of Jupiter will be visible anywhere from Earth to Jupiter orbit.
The four dots represent (from left to right):
location distance (1E+06 km)
--------------------------------- -------------------
Io's orbit 0.42
Jupiter's Hill sphere (max orbit) 53.2
5.2 - 1 AU (inferior conjunction) 628.5
5.2 + 1 AU (superior conjunction) 928.5

Python script for the plot
import numpy as np
import matplotlib.pyplot as plt
R_jupiter = 69900. # km
a_jupiter = 778.5E+06 # km
a_io = 421.8E+03 # km
AU = 150E+06 # km
G_Msun, GM_jupiter = 1.327E+20, 1.267E+17 # m^3/s^2
minres = (1/60.) * np.pi/180 # minimum resolution of human eye ~ 1 arcminute
R_Hill = a_jupiter * (GM_jupiter / (3.*G_Msun))**(1./3.)
print('R_Hill for Jupiter (million km): ', R_Hill/1E+06)
print('Jupiter at 5.2 AU, minres (radians): ', 2*R_jupiter/a_jupiter, minres)
distance = np.logspace(np.log10(a_io), np.log10(a_jupiter+AU), 2001)
size = 2*R_jupiter / distance
apparent_size = np.sqrt(minres**2 + size**2)
relative_brightness = (a_jupiter/distance)**2
apparent_surface_brightness = relative_brightness * (minres / apparent_size)**2
points = [a_jupiter+AU, a_jupiter-AU, R_Hill, a_io]
ipoints = [np.argmax(distance >= p) for p in points] # I'm lazy
relative_brightness_points = relative_brightness[ipoints]
apparent_surface_brightness_points = apparent_surface_brightness[ipoints]
plt.figure()
plt.plot(distance, relative_brightness)
plt.plot(points, relative_brightness_points, 'ok')
plt.plot(distance, apparent_surface_brightness)
plt.plot(points, apparent_surface_brightness_points, 'ok')
plt.text(3E+06, 0.8, 'apparent surface brightness', fontsize=16)
plt.text(3E+06, 1E+05, 'relative brightness', fontsize=16)
plt.xlabel('distance (km)', fontsize=16)
plt.xscale('log')
plt.yscale('log')
plt.show()